jstat的显示结果含义
S0:Heap上的 Survivor space 0 段已使用空间的百分比
S1:Heap上的 Survivor space 1 段已使用空间的百分比
E: Heap上的 Eden space 段已使用空间的百分比
O: Heap上的 Old space 段已使用空间的百分比
P: Perm space 已使用空间的百分比
YGC:从程序启动到采样时发生Young GC的次数
YGCT:Young GC所用的时间(单位秒)
FGC:从程序启动到采样时发生Full GC的次数
FGCT:Full GC所用的时间(单位秒)
GCT:用于垃圾回收的总时间(单位秒)
稍微说说垃圾收集GC的基本操作过程。
首先,GC把内存大体分成4块,分别是old generation(年老代),eden(年轻代),以及survivor space1(ss1),survivor space0(ss0).当声明变量的时候,首先是把变量声明在年轻代中,然后当年轻代被填满,则发生次要垃圾收集,将其中存活对象复制到SS1中,再将年轻代清空。
继续在eden中声明对象,当eden再次填满,则再次发生次要垃圾收集,这次是把ss1的内容计算存活期,如果很长就复制到年老代,其余的存活的复制到ss0,然后将ss1清空,并对eden进行前述的次要垃圾收集。
当年老代也被填满,则产生一次主要垃圾收集,非常耗费时间。
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。
OutOfMemoryError: PermGen space,从表面上看就是内存溢出,解決方法也一定是加大内存。为什么会内存溢出:这一部分用于存放Class和Meta的信息,Class在被 Load的時候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的話,就很可能出现PermGen space错误。这种错误常見在web服务器对JSP进行pre compile的時候。