JVM堆分为:新生代(一般是一个Eden区,两个Survivor区),老年代(old区),持久代(也就是永久代)。
如图:
1,新生代:(1)所有对象创建在新生代的Eden区,当Eden区满后触发新生代的Minor GC,将Eden区和非空闲Survivor区存活的对象复制到另外一个空闲的Survivor区中。(2)保证一个Survivor区是空的,新生代Minor GC就是在两个Survivor区之间相互复制存活对象,直到Survivor区满为止。
2,老年代:当Survivor区也满了之后就通过Minor GC将对象复制到老年代。老年代也满了的话,就将触发Full GC,针对整个堆(包括新生代、老年代、持久代)进行垃圾回收。
3,持久代:持久代如果满了,将触发Full GC。
所以,问题:JVM垃圾回收中full GC的触发条件可能有哪些呢?
(1)老年代满
(2)持久代满
(3)System.gc()