一、垃圾回收的过程
- 大多数情况下对象在Eden分配,当Eden没有足够空间时将发起一次Minor GC。
- 当Eden执行Minor GC后还不足以为对象分配空间,大对象直接进入老年代。可以用参数设置大对象直接进入老年代,避免频繁Minor GC。
- 如果对象在Eden出生,发生Minor GC后任然存活,且能被Survivor容纳,年龄加1,达到一定年龄进入老年代,默认15。
- 占Survivor空间一半以上且年龄相等的对象,大于等于该年龄以上的对象直接进入老年代。
- 发生Minor GC之前会先检查老年代最大可用连续空间是否大于新生代所有对象总空间。如果大于说明Minor GC安全;否则会判断是否允许担保失败,如果允许担保失败,判断老年代最大连续空间是否大于历次普升到老年代对象 的平均大小,如果大于则尝试Minor GC,否则执行Full GC