对象分配过程
- 执行方法时候, 方法压入栈中,局部变量指向的对象在新生代分配内存
- 当方法执行完毕,局部变量随栈帧弹出 这时候内存对象就没人引用了
- 随着1、2步骤的不断发生,新生代内存满了 ,触发 young gc 回收掉哪些不再被引用的对象实例
- 如果有的对象逃过15次 young gc 都还活着(一般是静态变量指向的对象),则会晋升到老年代
- 老年代如果内存不足,也会进行 old gc
特殊情况
- 大对象直接进入老年代
- 空间担保 触发 full gc
- 动态对象年龄判断机制
新生代回收后 存活对象过多,导致大量直接进入老年代