作者: 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