jdk11新特性——新的Epsilon垃圾收集器
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk11新特性——新的Epsilon垃圾收集器相关的知识,希望对你有一定的参考价值。
目录
一、Epsilon垃圾收集器概述
- A NoOp Garbage Collector
- JDK上对这个特性的描述是: 开发一个处理内存分配但不实现任何实际内存回收机制的GC, 一旦可用堆内存用完, JVM就会退出。
- 如果有System.gc()调用, 实际上什么也不会发生(这种场景下和-XX:+DisableExplicitGC效果一样), 因为没有内存回收, 这个实现可能会警告用户尝试强制GC是徒劳。
二、Epsilon垃圾收集器用法
- 再 VM options选项中配置 -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC,如下图:
三、Epsilon垃圾收集器代码示例
-
示例代码
package com.xz.jdk11.day1; import java.util.ArrayList; import java.util.List; /** * @description: * @author: xz */ public class EpsilonTest public static void main(String[] args) boolean flag = true; List<Garbage> list = new ArrayList<>(); long count = 0; while (flag) list.add(new Garbage()); if (count++ ==100) list.clear(); count++; System.out.println("程序结束"); class Garbage //这个方法是GC再清除本对象时,会调用一次 @Override public void finalize() System.out.println(this + "垃圾收集");
-
运行,输出结果如下:
-
由上图输出结果可知,使用选项 -XX:+UseEpsilonGC, 程序很快就因为堆空间不足而退出。
四、使用Epsilon垃圾收集器的原因
- 提供完全被动的GC实现,,具有有限的分配限制和尽可能低的延迟开销,但代价是内存占用和内存吞吐量。
- java实现可广泛选择高度可配置的GC实现。各种可用的收集器最终满足不同的需求,,即使它们的可配置性使它们的功能相交。 有时更容易维护单独的实现,,而不是在现有GC实现上堆积另一个配置选项。
五、使用Epsilon垃圾收集器的主要用途
- 性能测试(它可以帮助过滤掉GC引起的性能假象)
- 内存压力测试(例如,知道测试用例 应该分配不超过1GB的内存, 我们可以使用-Xmx1g –XX:+UseEpsilonGC, 如果程序有问题, 则程序会崩溃)
- 非常短的JOB任务(对象这种任务, 接受GC清理堆那都是浪费空间)
- VM接口测试
- Last-drop 延迟&吞吐改进
以上是关于jdk11新特性——新的Epsilon垃圾收集器的主要内容,如果未能解决你的问题,请参考以下文章