《JDK10新特性官方文档》JEP307: G1 Full GC的并行化

 

作者: Stefan Johansson

创建时间:2017/01/17 11:40

更新时间:2018/03/29 07:39

类型: 特性

状态: 已关闭/已提交

组件:hotspot/gc

范围:实现类

讨论: openjdk.java.net上的hotspot-gc-dev

影响:M

持续时间:M

优先级:3

审阅人:Mikael Vidstedt

支持者:Mikael Vidstedt

版本:10

问题讨论8172890

总结

通过将G1的Full GC操作并行化来改善G1的最坏情形下的延迟。

非目标

为所有用例使得并行化垃圾收集器的Full GC性能达到一致。

提案目的

G1垃圾收集器在JDK9版本中是默认使用的,以前默认的垃圾收集器已经有了并行化的Full GC功能,为了最大限度的减少用户在各种垃圾收集器的Full GC方面体验的差异,G1 在Full GC也应该做到并行化。

提案描述

G1 垃圾收集器是被设计用来避免JVM进行Full GC操作的,但是当并发收集器回收内存太慢时JVM就会进行一次Full GC。当前G1垃圾收集器在Full GC时使用的是单线程的标记-清除-整理算法。我们打算并行化标记-清除-整理算法,使用的线程数和在年轻代和混合(注: 原文为Mixed collections,不知道怎么翻译)收集使用的线程数量一致。线程数量可以通过 -XX:ParallelGCThreads 参数来配置,这个配置同时也会影响在年轻代和混合代垃圾收集时的线程数量。

测试

  • Full GC时间测试确保和以前相比有所改善。因为G1旨在避免完整的GC,所以这里考虑到基准分数可能不够好。
  • 用VTune或者Solaris Studio性能分析软件进行运行时间分析,查找没必要的性能瓶颈。

风险和假设

  • 这个工作是建立在假定G1设计原理上没有任何东西会阻止Full GC的并行化实现上的。
  • 因为G1使用了regions(分区),在进行并行Full GC操作后相比单线程的Full GC极大可能会造成空间的浪费。

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/66858.html

(0)
上一篇 2021年8月11日
下一篇 2021年8月11日

相关推荐

发表回复

登录后才能评论