算法|JVM有几种垃圾回收(GC)算法,你知道吗?( 二 )


-XX:G1MixedGCCountTarget
-XX:G1ReservePercent
-XX:MaxTenuringThreshold
五、Shenandoah GC
JDK12开始引入了Shenandoah GC , 它的主要目标是使99.9%的停顿小于10ms , 这种算法与其它GC算法的主要区别是引入了一个Concurrent Evacuation的过程 , 在这一过程中 , JVM将对象集合从集合集复制到其它区别 。
它的JVM参数配置如下:
-XX:+UseShenandoahGC
六、Z GC
Z GC据说与Azul的Zing 中的C4 GC是完全等价的 , 这是一款性能比G1优秀的垃圾收集器 , 在JDK11中 , Z GC被以实验性的特性引入 , 在JDK15中正式投入使用 。 在JDK16发布后 , GC暂停时间已经缩小到1ms以内 , 并且时间复杂度为o(1)了 , 这也意味着GC停顿时间是一个固定值 , 不会受到堆内存大小的影响了 。
在Z GC中 , 为了更灵活高效的管理内存 , 使用了内存多重映射 , 把同一块儿物理内存映射为Marked0、Marked1、Remapped三个虚拟内存 。 当应用程序创建对象时 , 会在堆上申请一个虚拟地址 , 这时 ZGC 会为这个对象在 Marked0、Marked1 和 Remapped 这三个视图空间分别申请一个虚拟地址 , 这三个虚拟地址映射到同一个物理地址 。 Marked0、Marked1 和 Remapped 这三个虚拟内存作为 ZGC 的三个视图空间 , 在同一个时间点内只能有一个有效 。 ZGC 就是通过这三个视图空间的切换 , 来完成并发的垃圾回收 。

它的JVM参数配置如下:
-XX:+UseZGC
七、Epsilon GC
区别与其它GC , 与Z GC一起在JDK11中被引入的Epsilon GC是A NoOp Garbage Collector(没有操作的垃圾收集器) 。 JDK上对这个特性的描述是:开发一个处理内存分配但不实现任何实际内存回收机制的GC ,一旦可用堆内存用完 , JVM就会退出 。 也就是说 , 这是一个没有什么卵用的GC 。 它的作用主要在于进行性能测试 , 它可以有效的过滤掉GC对于性能的影响 , 因为它什么也不做 。 另外它也可以用于进行内存压力测试 , 看看多久程序会崩溃 , 用于检测自己的代码质量 。
它的JVM参数配置如下:
-XX:+UseEpsilonGC

【算法|JVM有几种垃圾回收(GC)算法,你知道吗?】