PS Survivour空间几乎满了

时间:2013-01-21 10:00:27

标签: memory-leaks garbage-collection jvm

我看到我的应用程序大部分时间PS幸存空间几乎已满(98%)。我不知道什么是PS幸存者空间。这是正常的吗? 在这种情况下应该做些什么? 有人可以解释一下。 在此先感谢:)

1 个答案:

答案 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 空间中剩余的对象不是实时的,并且不需要对它们进行检查。