如果使用G1 GC,为什么建议使用Java 10?

时间:2018-12-25 09:46:38

标签: java garbage-collection java-10 g1gc

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

-XX:ParallelGCThreads

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

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

2 个答案:

答案 0 :(得分:6)

因为直到Java 10 G1GC才在世界各地的完整GC周期中完全平行。根据{{​​3}},这可以改善最坏情况的延迟:

  

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

答案 1 :(得分:0)

实际上,如果您使用G1GC,则建议使用 Java 11 ,因为与10相比,它进行了许多工作以减少其占用空间并降低其暂停。 / p>

在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上更多   更改),大大减少了内存占用。