fgl*_*lez 80 java jvm-arguments
它们是年轻一代垃圾收集的算法.
第二个(UseParNewGC)通过并发tenured generation垃圾收集自动激活(参见Java Concurrent and Parallel GC),但两个并行算法之间是否存在差异?
fgl*_*lez 117
经过大量的搜索,我发现的最佳解释是来自本月问题的 Java性能调优网站:1.4.1垃圾收集算法,2003年1月29日
年轻一代垃圾收集算法
在(原)复制收集器(默认启用).当这个收集器启动时,所有应用程序线程都会停止,并且使用一个线程(即使在多CPU机器上只有一个CPU)进行复制收集.这被称为stop-the-world集合,因为基本上JVM会暂停其他所有内容,直到集合完成.
的并行复制收集(使用-XX启用:+ UseParNewGC).就像原始的复制收藏家一样,这是一个世界级的收藏家.然而,这集电极并行化复制收集在多个线程,这是比原来的单螺纹复制收集器,用于多CPU的机器更有效(尽管不是用于单CPU的机器).与原始的单线程复制收集器相比,此算法可能会使年轻代收集的速度等于可用CPU数量.
的平行扫集电极(启用使用-XX:UseParallelGC).这就像之前的并行复制收集器一样,但算法在多CPU机器上针对千兆字节堆(超过10GB)进行了调整.此收集算法旨在最大化吞吐量,同时最大限度地减少暂停.它有一个可选的自适应调整策略,它将自动调整堆空间的大小.如果你使用这个收藏家,你只能使用老一代的原始标记-清除收集器(即新老一代并发收集器无法与这个年轻一代收藏家工作).
根据这些信息,似乎主要区别(除了CMS合作)是UseParallelGC支持人体工程学,而UseParNewGC则不支持.
Iva*_*ang 20
UseParNewGC 年轻代复制收集器的并行版本与并发收集器一起使用(即,如果在命令行上使用-XX:+ UseConcMarkSweepGC,则如果未在命令行上显式设置,则标志UseParNewGC也将设置为true ).
也许最容易理解的方法是Alexey Ragozin制作的垃圾收集算法的组合
<table border="1" style="width:100%">
<tr>
<td align="center">Young collector</td>
<td align="center">Old collector</td>
<td align="center">JVM option</td>
</tr>
<tr>
<td>Serial (DefNew)</td>
<td>Serial Mark-Sweep-Compact</td>
<td>-XX:+UseSerialGC</td>
</tr>
<tr>
<td>Parallel scavenge (PSYoungGen)</td>
<td>Serial Mark-Sweep-Compact (PSOldGen)</td>
<td>-XX:+UseParallelGC</td>
</tr>
<tr>
<td>Parallel scavenge (PSYoungGen)</td>
<td>Parallel Mark-Sweep-Compact (ParOldGen)</td>
<td>-XX:+UseParallelOldGC</td>
</tr>
<tr>
<td>Serial (DefNew)</td>
<td>Concurrent Mark Sweep</td>
<td>
<p>-XX:+UseConcMarkSweepGC</p>
<p>-XX:-UseParNewGC</p>
</td>
</tr>
<tr>
<td>Parallel (ParNew)</td>
<td>Concurrent Mark Sweep</td>
<td>
<p>-XX:+UseConcMarkSweepGC</p>
<p>-XX:+UseParNewGC</p>
</td>
</tr>
<tr>
<td colspan="2">G1</td>
<td>-XX:+UseG1GC</td>
</tr>
</table>Run Code Online (Sandbox Code Playgroud)
结论:
Sur*_*ran 15
UseParNewGC通常知道"并行年轻代收集器"在各方面都与并行垃圾收集器(-XX:+ UseParallelGC)相同,除了它更复杂和高效.它也可以与"并发低暂停收集器"一起使用.
有关更多信息,请参阅Java GC FAQ,问题22.
请注意,UseParNewGC存在一些已知错误
| 归档时间: |
|
| 查看次数: |
139178 次 |
| 最近记录: |