过程描述
- 优先在eden分配
- 大对象直接进去老年代
- 年轻代分配失败 进行minor gc
- minor gc前会 老年代内存“分配担保” 最大的连续空闲空间大于 历次晋升对象总大小
a. 是 安全进行minor gc
b. 否 先进行full gc - minor gc 后
a. survivor 容纳不下的存活对象,晋升老年代
b. survivor放得下存活空间 但是 “动态年龄判断” 超过survivor一半空间 年龄大于等于n的晋升老年代 - 长期存活的对象进入老年代:minor gc后存活对象年龄加一, 存活对象年龄熬到15 ,下次 minor gc 就会晋升老年代 也就是16岁成年了 老了
如果 minor gc 晋升老年代的对象总大小 老年代放不下或者 老年代内存占用大于cms 的触发比例 进行full gc
思考几个问题
• 对象在新生代的分配
• 什么时候会触发Minor GC
• 触发Minor GC之前会如何检查老年代可用内存大小和新生代对象大小
• 如何检查老年代可用内存大小和历次Minor GC之后升入老年代的平均对象大小
• 什么情况下Minor GC之前会提前触发Full GC
• 什么情况下会直接触发Minor GC
• Minor GC之后有哪几种情况对象会进入老年代