- 什么时候会尝试触发Minor GC
新生代内存区域基本快满了,再次分配对象的时候,发现空间不足
- 触发Minor GC之前会检查老年代大小?
- 检查老年代可用内存空间,是否大于新生代所有对象的总大小,如果大于新生代所有对象,就可以发起Minor GC
- 老年代可用空间小于新生代的所有对象大小,检查'-XX:HandlePromotionFailure'的参数是否设置,如果设置了,就检查老年代的内存大小,是否大于之前每一次Minor GC后进入老年代对象的平均大小,如果大于就进行Minor GC
- 如果没有设置'-XX:HandlePromotionFailure'参数,此时就会触发一次Full GC,尽量腾出一些空间,然后再执行Minor GC
- 什么时候在Minor GC之前会触发一次Full GC
Minor GC后的对象太多,无法放入 survivor区
- Full GC的算法是什么?
标记整理算法
- Minor GC之后可能对应哪几种情况?
- 剩余存活的对象大小,小于survivor区,此时存活对象进入survivor区
- 剩余存活的对象大小,大于survivor区,但是小于老年代可用空间,直接进入老年代
- 剩余存活的对象大小,大于survivor区,大于老年代可用空间,就会触发Full GC
- 哪些情况下Minor GC的对象会进入老年代?
- Minor GC 15次的对象会进入老年代,就是说超过年龄的对象
- 大对象
- Minor GC之后剩下的对象超过survivor区大小