1.垃圾分代回收
堆空间分为年轻代、老年代,默认内存占用比例为= 1:2对象分配步骤为:
1.1 年轻代
主要分为Eden、From、To三个区域,其中,默认内存占用比例为8:1:1存活对象进入年轻代的条件:新产生的对象优先分配到老年代(除大对象,大对象会优先分配到老年代)
1.2 老年代
存活对象进入老年代的条件:
1.2.1 创建大对象(对象内存大于设定阈值)直接进入老年代
1.2.2 young gc后,To Survivor区不足以存放存活对象
1.2.3 每次young gc后,存活对象年龄+1。经过多次young gc后,如果存活对象的年龄达到了设定阈值(默认15),则会晋升到老年代中。
1.2.4 动态年龄判定规则。
To Survivor区中年龄从小到大的对象占据空间的累加之和,占到了 To Survivor区一半以上的空间,那么大于等于此年龄的对象会直接进入老年代,而不需要达到默认的晋升年龄。举例:年龄1+年龄2+年龄3+年龄N的对象加起来的空间,大于survivor区域的一半,就会让年龄N和年龄N以上的对象进入老年代。动态年龄判断应该是这样子的。其中,年龄N是动态的,可能为3时达到此条件,也可能是是为15时,最大为15,对象头中年龄字段大小为4哥字节,故最大15。说的通俗一点:就是年龄从小到大对象的占据空间的累加和,而不是某一个特定年龄对象占据的空间。
2.垃圾回收触发时机
2.1 young gc
年轻代垃圾回收
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。