(1)新生代(Eden + From Survior + To Survior)(比例为8:1:1,可以通过参数 –XX:SurvivorRatio 来设定)
JVM 每次只会使用 Eden 和其中的一块 Survivor 区域来为对象服务,总是有一块 Survivor 区域是空闲着的。
分配不够由老年代进行担保。
老年代:数组和大的对象,新生代中发生minor gc超过一定次数(默认15,可以通过-XX:MaxTenuringThreshold设置)移动进来的对象
(2)堆中:新生代+老年代(比例约为:1:2,该值可以通过参数 –XX:NewRatio 来指定)
方法区:永久代
minor gc:发生在新生代(复制算法)中,当Eden区满的时候发生,Survior满的时候不会引发gc
full gc:指发生在老年代中的GC(标记清除算法)
(1)当老年代满时会引发Full GC,Full GC将会同时回收年轻代、老年代
(2)当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载
Minor GC ,Full GC 触发条件
Minor GC触发条件:当Eden区满时,触发Minor GC。
Full GC触发条件:
(1)调用System.gc时,系统建议执行Full GC,但是不必然执行
(2)老年代空间不足
(3)方法去空间不足
(4)通过Minor GC后进入老年代的平均大小大于老年代的可用内存
(5)由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小
频繁出现full gc的问题及解决办法请看这篇博客:Full GC