Netbeans 的内存监控工具(与 VisualVm 是同一工具)有一个有趣的跟踪内存泄漏的指标:Surviving Generations 指标。
A definition of this metric可以在 oracle.com 上找到:
- Generation 是在相同的 GC 间隔内(两次垃圾回收之间)创建的一组实例
- 幸存一代是至少在一次垃圾回收中幸存下来的一代。幸存的垃圾收集次数 - 代的年龄 - 是其唯一标识符
- Surviving Generations(指标)值是当前在堆上存活的不同 Surviving Generations 的数量(number of Generations with different generation ages)
我对第二个定义有疑问。我知道实例在垃圾回收中存活意味着什么。但我不确定在垃圾回收中存活下来的一代 意味着什么。这是否意味着该代的至少一个实例在垃圾回收中幸存下来?
最佳答案
是的。基本上这意味着,在垃圾回收 X 和 X+1 之间创建的实例中,有一些现在还活着,当发生更多垃圾回收时。
在我看来,所有这三个定义只对每个类(class)有意义。我的意思是,给定类的“Surviving Generations (metrics) value”是该类现在在堆上存活的不同代数。
关于java - 了解幸存世代指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9330931/