1. 对象优先在 Eden 分配
当Eden区没有足够的空间进行分配的时候就要做一个Minor GC
2. 大对象直接进入老年区
如果遇到朝生夕死的大对象更惨,所以要避免出现这样的代码
3. 长期存活的对象会进入老年代
对象出⽣并且经过第⼀次Minor GC后仍然存活并且能 被Survivor容纳的话,将被移动到Survivor空间中,并且年龄记为 1,在Survivor空间中每次熬过一次 Minor GC,对象的年龄就增加1岁,等到15岁就会进入老年代。
####4. 动态对象年龄判定 如果Survivor空间中相同年龄的对象⼤⼩总和⼤于 Survivor空间的⼀半,年龄⼤于或等于该年龄的对象就可以直接进⼊⽼ 年代。
####5. 空间分配担保 在发生Minor GC 之前 先检查是否连续空间会发育新生代所有对象的总空间,如果这个条件成立就可以确保GC是安全的,如果不行的话看设置 HeadlePromotionFailure , 如果允许,就会检查老年代是否最大可用连续空间大于历次晋升到老年代的对象的平均大小,如果大于,就可以尝试进行一次 Minor GC ,但是这个是有风险的
所谓的冒险是说在新生代执行复制收集算法的时候,如果出现 Survivor 无法存放下对象,那么无法容纳的都将要进入老年代,前提是老年代有容纳这些对象的剩余空间,一共有多少对象会存活下来在实际完成GC前是不知道的,所欲取晋升到老年代对象容量的平均大小作为参考,如果某次MinorGC 存活后对象突增,远远高于平均值的话,那么依然会担保失败,要发起Full GC