配置 G1GC 时,我们有两种线程数:
-XX:ParallelGCThreads
和 -XX:ConcGCThreads
。
有什么区别?他们将如何影响? 任何参考都值得赞赏。
G1 算法具有一些阶段,其中一些阶段是“停止世界”阶段,在垃圾收集期间停止应用程序,并且它还具有在应用程序运行时同时发生的阶段(候选标记等),请记住以下信息:
ParallelGCThreads 选项影响应用程序线程停止时用于阶段的线程数,ConcGCThreads 标志影响用于并发阶段的线程数。
它是设置,或者准确地说是 JVM 调整设置...我们通知 JVM 在该特定类型的垃圾收集中使用多少个线程。
希望你已经知道什么是垃圾收集,所以当 JVM 运行垃圾收集时,取决于你的 JVM 设置了什么算法作为默认收集器。
您可能已经知道有各种类型的垃圾收集器可用,例如 G1、CMS 等。
因此,根据您的设置(此处为线程数),GC 算法将尝试使用那么多线程进行堆清理。当 JVM 运行 FULL GC 时,它会停止其他线程处理。
现在假设,您的应用程序正在运行并执行非常繁重的任务,多个用户将其用于多种目的(例如非常繁忙的应用程序),并且 JVM 现在正在运行 FULL GC,那么在这种情况下,所有工作线程将暂停并进行 GC会清理的。在此期间,如果所有线程都被 JVM 获取,那么用户将看到响应延迟。所以,你可以告诉 JVM,嘿,只在垃圾收集运行的 类型(CMS 或并行)上使用 那么多(数量)线程。
要了解有关 GC 类型及其差异、什么适合您的需求的更多信息,请参考 Oracle 的一些优秀文章和文档。
-XX:ParallelGCThreads: 设置垃圾收集器并行阶段使用的线程数。默认值根据 JVM 运行平台的不同而不同。
-XX:ConcGCThreads: 并发垃圾收集器将使用的线程数。默认值根据 JVM 所在平台的不同而不同 正在运行。