首页 > 解决方案 > 如果您使用 G1 GC,为什么建议使用 Java 10?

问题描述

Java 10 通过迭代改进其现有算法来减少 Full GC 暂停时间。

-XX:ParallelGCThreads

据我了解,G1 不会与我们的应用程序同时运行其收集周期。它仍然会定期暂停应用程序,并且随着堆大小的增加,Full GC 暂停会增加。 

那么它是如何提高性能的呢?谁能解释一下?

标签: javagarbage-collectionjava-10g1gc

解决方案


因为直到 Java 10,G1GC 才在 stop-the-world 全 GC 周期中完全并行化。根据JEP 307: Parallel Full GC for G1,这可以改善最坏情况的延迟:

G1 垃圾收集器旨在避免完全收集,但是当并发收集不能足够快地回收内存时,将发生回退完全 GC。G1 的完整 GC 的当前实现使用单线程标记-扫描-紧凑算法。我们打算并行化 mark-sweep-compact 算法并使用与 Young 和 Mixed 集合相同数量的线程。线程数可以通过 -XX:ParallelGCThreads 选项控制,但这也会影响用于 Young 和 Mixed 集合的线程数。


推荐阅读