Serial Mark-Sweep-Compact(PSOldGen)PS代表什么?

时间:2013-05-08 14:10:24

标签: java garbage-collection

当我搜索我在gc日志中看到的PSOldGen垃圾收集器时,我发现它是Serial Mark-Sweep-Compact。如果这个gc是串行的,PSOldGen中的PS代表什么? AFAIK它是平行清除。但这让我很困惑。

[Full GC [PSYoungGen: 647K->0K(60352K)] [PSOldGen: 45361K->45875K(54528K)] 46008K->45875K(114880K) [PSPermGen: 10201K->10201K(21248K)], 0.0359430 secs]

2 个答案:

答案 0 :(得分:8)

JVM中有2个收藏家:年轻的太空收藏家和旧的太空收藏家。 HotSpot JVM正在实现一堆算法,但只有某些收集器组合是可行的。

PSYoungGen是一个“并行清除”年轻空间GC算法,但它与旧空间(Tenured)的默认串行算法不兼容。 PSOldGen序列旧空间算法,专门用于处理并行清除年轻空间算法 - PSYoungGen

您也可以为旧空间启用并行算法(-XX:+UseParallelOldGC),在这种情况下,您会看到PSYoungGenParOldGen对算法正在运行。

您还可以启用另一个并行的年轻空间算法-XX:+UseParNewGC,它将与默认的串行旧空间算法Tenured串联。

我已经失去了你吗? :)

您可以在我的blog中阅读有关在HotSpot JVM中实现的算法的更多信息。

答案 1 :(得分:2)

在某种程度上,您是正确的,除非它实际上取决于您配置JVM命令行选项的方式。年轻的GC是Parallel Scavenge和多线程。

有趣的是,如果您使用-XX:+UseParallelGC启动它,那么您将获得一个串行(单线程)Old Gen GC。如果您使用-XX:+UseParallelOldGC,那么您将获得一个多线程,并行的年轻GC和多线程,并行旧版GC。

来源:Java Performance,第7章,垃圾收集器部分。

令人惊讶,不是吗。这里也有很多修修补补的空间! Java Performance书非常值得一读!