堆内存分为年轻一代、老世代和PermGem。
在年轻一代中,分配一个伊甸园空间和两个幸存者空间。根据我们机器中的GC,一个幸存者空间应该总是可用的,这样当GC标记年轻的gen (eden空间+1个幸存者空间)中已经存在的引用(扫描)并将它们升级到旧的gen时,下一个活动节点引用就可以存储在那里。
第一个问题是,这种理解是否正确?
如果是的话,在任何时候,年轻一代的一部分都将以1名幸存者空间的形式空缺/可用。那么,如何在GC日志中看到年轻的gen已满(即GC被触发)或这是误导性的?这意味着只有可用的年轻一代内存显示在GC日志中。
如何分析堆内存是满的,即OutOfMemory,当年轻一代的某些部分总是有一些空空间时,因此堆的所有内存。
提前谢谢。
发布于 2016-08-18 11:32:24
有两种GC集合。
要读取和分析GC日志,可以参考How to read a verbose:GC output?
发布于 2016-08-18 18:40:11
假设您使用的是hotspot,那么使用-XX:+PrintGCDetails -XX:+PrintHeapAtGC进行日志记录应该足够详细,以涵盖您感兴趣的所有内容。
https://stackoverflow.com/questions/39016802
复制相似问题