垃圾收集算法思路:把对象按照寿命长短分组,分为年轻代和年老代,新创建对象被分在年轻代,如果对象经过几次回收后仍然存活,那么再把这个对象分到年老代。
年老代的收集频度不像年轻代的频繁,这样就减少了每次垃圾收集时所扫描的对象数量,从而提高垃圾回收效率
Young : 分为eden区和两个Survivor区,新建对象都在eden区,当eden区满后触发minor GC ,将Eden区仍然存活的对象复制到其中一个survivor区,再把另一 个survivor区中的存活对象复制到这个survivor区,以保证始终有一个survivor区是空的。
Old:一种存放的是Young区的survivor满后触发minor GC后仍存活的对象,另一种survivor区中对象足够老,也直接存放到old区,如果old区满了,将会触发 Full GC回收整个堆内存
Perm:存放的主要是类class对象,如果一个类被频繁加载,也可能导致perm区满,perm区的垃圾回收也是由Full GC触发
注:-Xmx:表示堆的最大大小 ,Xms:表示初始化大小
jstat -gcutil [pid][intervel][count] :例:jstat -gcutil 1286 500 100
S0:表示Head上的Survivor space 0 区已使用空间百分比
S1:表示Head上的Survivor space 1 区已使用空间百分比
E:表示Head上的Eden space 区已使用空间百分比
O:表示Head上的Old space 区已使用空间百分比
P:表示Perm space 区已使用空间百分比
YGC:表示从应用程序启动到采样时发生Young GC的次数
YGCT:表示从应用程序启动到采样时发生Young GC所用的时间(秒)
FGC:表示从应用程序启动到采样时发生Full GC的次数
FGCT:表示从应用程序启动到采样时发生Full GC所用的时间(秒)
GCT:表示从应用程序启动到采样时用于垃圾回收的总时间(单位秒)