Java 串行标记扫描压缩(PSOldGen)PS代表什么?

Java 串行标记扫描压缩(PSOldGen)PS代表什么?,java,garbage-collection,Java,Garbage Collection,当我搜索我在gc日志中看到的PSOldGen垃圾收集器时,我发现它是串行标记扫描压缩的。如果这个gc是串行的,PSOldGen中的PS代表什么?好吧,这是平行扫气。但这让我困惑 [Full GC [PSYoungGen: 647K->0K(60352K)] [PSOldGen: 45361K->45875K(54528K)] 46008K->45875K(114880K) [PSPermGen: 10201K->10201K(21248K)], 0.0359430 sec

当我搜索我在gc日志中看到的PSOldGen垃圾收集器时,我发现它是串行标记扫描压缩的。如果这个gc是串行的,PSOldGen中的PS代表什么?好吧,这是平行扫气。但这让我困惑

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

在某种程度上,您是正确的,但这实际上取决于您如何配置JVM命令行选项。young gen GC是并行清除和多线程的

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

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


令人惊讶,不是吗。这里也有很大的修补空间!Java性能手册非常值得一读

JVM中有两个收集器:年轻的空间收集器和旧的空间收集器。HotSpot JVM正在实现一系列算法,但只有特定的收集器组合是可行的

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

您也可以为旧空间启用并行算法(
-XX:+UseParallelOldGC
),在这种情况下,您将看到
PSYoungGen
ParOldGen
一对算法在工作

您还可以启用另一个并行年轻空间算法
-XX:+UseParNewGC
,该算法将与默认的串行旧空间算法
结合使用

我已经失去你了吗?:)


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

HotSpot GC备忘单打印在我的桌面上。您可以为第一个旧收集器使用串行标记扫描压缩(终身)更新备忘单吗?是否可以为ParNew+终身制组合添加新行?当做