【问题标题】:PS Survivor space almost fullPS幸存者空间快满了
【发布时间】:2013-01-04 08:42:21
【问题描述】:

我看到 PS 幸存者空间几乎已满 (98 %) 用于我的应用程序的大部分时间。我不知道什么是 PS 幸存者空间。这是正常的吗? 在这种情况下应该怎么做?

【问题讨论】:

    标签: memory-leaks garbage-collection jvm


    【解决方案1】:

    首先,参见例如这里:What is a survivor space?

    通常,堆的 YoungGeneration 部分有 2 个幸存者空间(例如,对于 Hostpot VM)。它们的存在是为了让对象在将它们提升到老一代之前成熟。因为清理老年代的成本更高。

    收集一些统计数据,看看大部分时间幸存者空间是否真的满了。您应该看到一个总是空的,而另一个正在填充。参见例如collecting GC stats的这个问题。

    获得数据后,查找:

    • 幸存者空间溢出 - 当幸存者空间太小而无法让对象在 YoungHeap 集合之间成熟并且对象在没有时间成熟的情况下溢出到 OldGeneration(并且升职前死)。

    • 另外,使用-XX:+PrintTenuringDistribution 监控任期分布。看看对象成熟的速度有多快。

    更新:阅读Hotspot Memory Management Whitepaper并查看串行收集器部分,对幸存者空间有很好的解释:

    注意:如果 To 空间已满,则来自 EdenFrom 的未激活对象 复制到它的是tenured,无论它们存活了多少年轻代集合。任何 根据定义,在活动对象被复制后留在 EdenFrom 空间中的对象是不活动的,不需要检查它们。

    【讨论】:

    • 嗨 Ales,感谢您的回复。看了你的帖子,我有了一个简单的想法。幸存者空间未满,几乎已满 (98%) 如何收集统计数据?完整的幸存者空间会导致系统崩溃吗?当幸存者空间已满时会发生什么?
    • 所以这是正常行为,因为对象从伊甸园空间复制到幸存者空间,幸存者空间几乎已满,对吧? ...我应该增加幸存者空间比率吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多