G1GC选项-XX:ParallelGCThreads与-XX:ConcGCThreads有什么区别?

10

在配置G1GC时,我们有两种线程计数方式-XX:ParallelGCThreads和-XX:ConcGCThreads,它们之间的区别是什么,它们将如何影响系统性能,请提供任何参考文献。

2个回答

21

G1算法有多个阶段,其中一些是“停止应用程序”的阶段,即在垃圾回收期间停止应用程序;同时,它也有可以与应用程序并发运行的阶段(如候选标记等)。因此:

ParallelGCThreads 选项影响应用程序线程停止时用于各个阶段的线程数,而 ConcGCThreads 标志影响用于并发阶段的线程数。


1
这是设置或者准确地说是JVM调优设置...我们告诉JVM在特定类型的垃圾回收中使用多少线程。我希望你已经知道什么是垃圾回收,所以当JVM运行垃圾回收时,它取决于为您的JVM设置的默认收集器使用了哪种算法。您可能已经知道有各种类型的垃圾收集器可用,例如G1、CMS等。因此,基于您的设置(这里是线程数),GC算法将尝试使用那么多线程进行堆清理。当JVM运行FULL GC时,它会暂停其他线程的处理。现在假设您的应用程序正在运行并执行非常繁重的任务,多个用户正在使用它进行多种目的(比如非常繁忙的应用程序),而JVM现在正在运行FULL GC,那么在这种情况下,所有工作线程都将暂停,并且GC将清理。在此期间,如果所有线程都被JVM获取,那么用户将看到响应延迟。因此,您可以告诉JVM,嘿,在垃圾收集运行期间只使用那么多(数字)线程,对于那种(CMS或Parallel)垃圾收集运行。要了解有关GC类型及其差异的更多信息,以及适合您需求的内容,请参考Oracle的一些好文章和文档。

这里有一个关于你提到的选项的参考资料。

-XX:ParallelGCThreads: 设置在垃圾回收器并行阶段使用的线程数。默认值因JVM运行的平台而异。

-XX:ConcGCThreads: 并发垃圾回收器将使用的线程数。默认值因JVM运行的平台而异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接