【问题标题】:Serial Mark-Sweep-Compact (PSOldGen) PS stands for?Serial Mark-Sweep-Compact (PSOldGen) PS 代表什么?
【发布时间】:2013-05-09 00:25:15
【问题描述】:

当我搜索在 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]

【问题讨论】:

    标签: java garbage-collection


    【解决方案1】:

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

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

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

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

    我已经失去你了吗? :)

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

    【讨论】:

    • Hotspot GC 备忘单打印在我的办公桌上。
    • 您能否为第一个老收藏家更新备忘单并使用 Serial Mark-Sweep-Compact (Tenured)?并且可能会为 ParNew+Tenured 组合添加一个新行?问候。
    【解决方案2】:

    在某种程度上你是对的,但它实际上取决于你如何配置你的 JVM 命令行选项。新生代 GC 是 Parallel Scavenge 和多线程的。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多