如果您使用G1 GC,为什么推荐使用Java 10?

Var*_*run 6 java garbage-collection g1gc java-10

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

-XX:ParallelGCThreads
Run Code Online (Sandbox Code Playgroud)

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

那它如何提高性能呢?有谁能解释一下?

Kar*_*cki 6

因为直到Java 10,G1GC才能在世界末日的完整GC循环中完全平行.根据JEP 307:G1的并行完整GC,这可以改善最坏情况下的延迟:

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


loi*_*ieu 0

事实上,如果您使用 G1GC,建议使用Java 11 ,因为与 10 相比,我们在它上面做了很多工作来减少其占用空间并减少其暂停。

hotspot-gc-use 邮件列表上对 G1GC 11、10 和 9 所做的各种改进进行了总结,您可以在以下链接找到它: http: //mail.openjdk.java.net/pipermail/hotspot -gc-use/2018-June/002759.html

列表中这篇文章的快速摘要:

[...] 我想指出的是,总体而言,与 JDK8 相比,G1 在 x64 处理器上“免费”可以减少 60% 的暂停时间(由于提到的具体更改,在 ARM/PPC 上可能会减少更多) ,大大减少了内存占用。