它们是用于年轻一代垃圾收集的算法。
第二个(UseParNewGC)与并发的终身生成垃圾收集自动激活(请参阅Java Concurrent和Parallel GC),但是,这两个并行算法之间有区别吗?
它们是用于年轻一代垃圾收集的算法。
第二个(UseParNewGC)与并发的终身生成垃圾收集自动激活(请参阅Java Concurrent和Parallel GC),但是,这两个并行算法之间有区别吗?
Answers:
经过大量搜索之后,我找到的最好的解释是从Java Performance Tuning网站上的本月问题:1.4.1垃圾收集算法,2003年1月29日
新一代垃圾收集算法
在(原)复制收集器(默认启用)。启动此收集器后,所有应用程序线程都将停止,并且复制收集将使用一个线程(即使在多CPU机器上也仅意味着一个CPU)继续进行。这被称为世界停止收集,因为基本上JVM会暂停其他所有操作,直到收集完成为止。
的并行复制收集(使用-XX启用:+ UseParNewGC)。像原始的复制收集器一样,这是一个世界停止的收集器。但是,此收集器可并行化多个线程上的复制收集,这比用于多CPU机器(尽管不是用于单CPU机器)的原始单线程复制收集器效率更高。与原始的单线程复制收集器相比,该算法有可能将年轻一代的收集速度提高一个等于可用CPU数量的倍数。
的平行扫集电极(使用-XX启用:UseParallelGC)。这类似于以前的并行复制收集器,但是针对多CPU机器上的千兆字节堆(超过10GB)调整了算法。该收集算法旨在最大程度地提高吞吐量,同时最大程度地减少暂停时间。它具有可选的自适应调整策略,该策略将自动调整堆空间的大小。如果使用此收集器,则只能使用旧版本中的原始标记扫描收集器(即,较新的旧版本并发收集器无法与此年轻收集器一起使用)。
根据此信息,似乎主要区别(除CMS合作外)是UseParallelGC支持人体工程学,而UseParNewGC不支持。
UseParNewGC 并行复制版本的年轻一代复制收集器与并发收集器一起使用(即,如果在命令行上使用-XX:+ UseConcMarkSweepGC,则如果未在命令行上另外明确设置UseUseNewNew标志,则它也设置为true )。
也许最容易理解的方法是将Alexey Ragozin的垃圾收集算法组合在一起
结论:
-XX:-UseParallelGC
。
-XX:+UseParallelGC
线索可将并行GC用于现代JVM的新旧GC。参见bugs.openjdk.java.net/browse/…–
UseParNewGC通常被称为“并行年轻代收集器”,在所有方面都与并行垃圾收集器(-XX:+ UseParallelGC)相同,不同之处在于它更加复杂和高效。也可以与“并行低暂停收集器”一起使用。
有关更多信息,请参见Java GC FAQ,问题22。
请注意,UseParNewGC有一些已知的错误