我看到我的应用程序大部分时间PS幸存空间几乎已满(98%)。我不知道什么是PS幸存者空间。这是正常的吗? 在这种情况下应该做些什么? 有人可以解释一下。 在此先感谢:)
答案 0 :(得分:13)
首先,请参阅例如在这里:What is a survivor space?
通常,堆的YoungGeneration部分中有2个幸存者空间(例如,对于Hostpot VM)。在将对象推广到老一代之前,它们允许对象成熟。因为清理老一代的成本更高。
收集一些统计数据,以查看幸存者空间是否在大多数情况下都是满的。您应该看到一个总是空的而另一个正在填充。参见例如这个问题适用于collecting GC stats。
获得数据后,请查找:
幸存者空间溢出 - 当幸存者空间太小而不允许对象在YoungHeap集合之间成熟并且对象溢出到OldGeneration而没有时间成熟时(这会发生)在晋升之前死去。)
同时,使用-XX:+PrintTenuringDistribution
监控终身分配。看看物体的成熟速度有多快。
更新:阅读Hotspot Memory Management Whitepaper并查看串行收集器部分,对幸存者空间有一个很好的解释:
注意:如果至空间已满,则 Eden 或来自的实时对象尚未显示 复制到它是终身,无论他们幸存下多少年轻一代的收藏。任何 根据定义,在复制了活动对象后, Eden 或 From 空间中剩余的对象不是实时的,并且不需要对它们进行检查。