PS Survivour空间几乎满了

Miz*_*zan 12 garbage-collection jvm memory-leaks

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

Ale*_*leš 14

首先,请参见此处:什么是幸存者空间?

通常,堆的YoungGeneration部分中有2个幸存者空间(例如,对于Hostpot VM).他们在那里允许对象成熟,然后将它们推广到老一代.因为清理老一代的成本更高.

收集一些统计数据,以查看幸存者空间在大多数情况下是否真的满了.您应该看到一个总是空的而另一个正在填充.请参阅此问题以收集GC统计数据.

获得数据后,请查找:

  • 幸存者空间溢出 - 当幸存者空间太小而不允许对象在YoungHeap集合之间成熟并且对象溢出到OldGeneration而没有时间成熟(并且在被提升之前死亡)时,会发生这种情况.

  • 同时,监控tenuring分布-XX:+PrintTenuringDistribution.看看物体成熟的速度有多快.

更新:阅读 热点内存管理白皮书,并参阅串行收集器部分,有一个很好的解释Survivor空间:

注意:如果To空间已满,则EdenFrom中尚未复制到其中的活动对象将被终身使用,无论他们生存了多少年轻代收藏.根据定义,复制了活动对象后,EdenFrom空间中剩余的任何对象都不是活动的,并且不需要检查它们.

  • 这是一个正常的行为,因为对象从幸存者空间复制到幸存者空间,幸存者空间几乎已经满了,对吧?......我应该增加幸存者的空间比率吗? (2认同)