-XX:+ UseParallelGC和-XX:+ UseParNewGC之间的区别


Answers:


119

经过大量搜索之后,我找到的最好的解释是从Java Performance Tuning网站上的本月问题:1.4.1垃圾收集算法,2003年1月29日

新一代垃圾收集算法

(原)复制收集器(默认启用)。启动此收集器后,所有应用程序线程都将停止,并且复制收集将使用一个线程(即使在多CPU机器上也仅意味着一个CPU)继续进行。这被称为世界停止收集,因为基本上JVM会暂停其他所有操作,直到收集完成为止。

并行复制收集(使用-XX启用:+ UseParNewGC)。像原始的复制收集器一样,这是一个世界停止的收集器。但是,此收集器可并行化多个线程上的复制收集,这比用于多CPU机器(尽管不是用于单CPU机器)的原始单线程复制收集器效率更高。与原始的单线程复制收集器相比,该算法有可能将年轻一代的收集速度提高一个等于可用CPU数量的倍数。

平行扫集电极(使用-XX启用:UseParallelGC)。这类似于以前的并行复制收集器,但是针对多CPU机器上的千兆字节堆(超过10GB)调整了算法。该收集算法旨在最大程度地提高吞吐量,同时最大程度地减少暂停时间。它具有可选的自适应调整策略,该策略将自动调整堆空间的大小。如果使用此收集器,则只能使用旧版本中的原始标记扫描收集器(即,较新的旧版本并发收集器无法与此年轻收集器一起使用)。

根据此信息,似乎主要区别(除CMS合作外)是UseParallelGC支持人体工程学,而UseParNewGC不支持。



@phunehehe感谢您的链接!这非常有帮助。
学生的灵魂

21

平行气相色谱

  • XX:+ UseParallelGC使用并行垃圾收集进行清理。(在1.4.1中引入)
  • XX:+ UseParallelOldGC将并行垃圾回收用于完整回收。启用此选项会自动设置-XX:+ UseParallelGC。(在5.0 Update 6中引入。)

UseParNewGC

UseParNewGC 并行复制版本的年轻一代复制收集器与并发收集器一起使用(即,如果在命令行上使用-XX:+ UseConcMarkSweepGC,则如果未在命令行上另外明确设置UseUseNewNew标志,则它也设置为true )。

也许最容易理解的方法是将Alexey Ragozin的垃圾收集算法组合在一起

结论:

  1. YOUNG生成上需要并行收集方法时,请应用-XX:+ UseParallelGC ,仍将序列标记扫描方法用作OLD生成收集
  2. 当您需要在YOUNG生成上使用并行收集方法时(自动设置-XX:+ UseParallelGC) OLD生成集合,请应用-XX:+ UseParallelOldGC
  3. 应用-XX:+ UseParNewGC和-XX:+ UseConcMarkSweepGC,当你需要在并行采集方法要求CMS方法您的收藏过代内存
  4. 您不能同时将-XX:+ UseParallelGC或-XX:+ UseParallelOldGC与-XX:+ UseConcMarkSweepGC一起应用,这就是为什么您要求-XX:+ UseParNewGC与CMS配对的原因,否则请显式使用-XX:+ UseSerialGC-XX:-如果希望对年轻一代使用串行方法,请使用ParNewNewGC

必须是-XX:-UseParallelGC
米纳斯米纳

注意:结论#1不再正确。应用-XX:+UseParallelGC线索可将并行GC用于现代JVM的新旧GC。参见bugs.openjdk.java.net/browse/…–
turbanoff

15

UseParNewGC通常被称为“并行年轻代收集器”,在所有方面都与并行垃圾收集器(-XX:+ UseParallelGC)相同,不同之处在于它更加复杂和高效。也可以与“并行低暂停收集器”一起使用。

有关更多信息,请参见Java GC FAQ,问题22。

请注意,UseParNewGC有一些已知的错误


8
您知道哪些已知错误或哪些JVM版本具有这些错误?
fglez 2010年

4

与-XX:+ UseParallelGC相比,将-XX:+ UseParNewGC与-XX:+ UseConcMarkSweepGC一起使用将导致次要GC的暂停时间更长。

这是因为,将对象从“年轻”升级到“老一代”将需要运行“最佳拟合”算法(由于“老一代”碎片化)才能找到该对象的地址。
当使用-XX:+ UseParallelGC时,不需要运行这样的算法,因为+ UseParallelGC仅可以使用MarkandCompact Collector进行配置,在这种情况下不会产生碎片。


这是一个非常好的见解。您是否进行了任何测试以确认这一点?
fglez
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.