题目解析:
jvm中垃圾回收分为scanvenge gc和full GC,其中full GC触发的条件可能有哪些?
A.栈空间满
B.年轻代空间满
C.老年代满
D.持久代满
E.System.gc()
答案:C D E
解析:
新生代、老年代、持久代
1,新生代:(1)所有对象创建在新生代的Eden区,当Eden区满后触发新生代的Minor GC,将Eden区和非空闲Survivor区存活的对象复制到另外一个空闲的Survivor区中。(2)保证一个Survivor区是空的,新生代Minor GC就是在两个Survivor区之间相互复制存活对象,直到Survivor区满为止。
2,老年代:当Survivor区也满了之后就通过Minor GC将对象复制到老年代。老年代也满了的话,就将触发Full GC,针对整个堆(包括新生代、老年代、持久代)进行垃圾回收。
3,持久代:持久代如果满了,将触发Full GC。
full GC触发的条件
除直接调用System.gc外,触发Full GC执行的情况有如下四种。
- 旧生代空间不足 旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出如下错误: java.lang.OutOfMemoryError: Java heap space
为避免以上两种状况引起的FullGC,调优时应尽量做到让对象在Minor
GC阶段被回收、让对象在新生代多存活一段时间及不要创建过大的对象及数组。- Permanet Generation空间满 PermanetGeneration中