📚 分类
JVM
🕵🏽‍♀️ 问题描述
说一下JVM中的分代回收
👨‍🏫 问题讲解
❒ 在java8时,堆被分为了两份:新生代和老年代(1:2)

❒ 对于新生代,内部又被分为了三个区域

✔ 伊甸园区Eden,新生的对象都分配到这里
✔ 幸存者区survivor(分成from和to)
✔ Eden区,from区,to区(8:1:1)

分代收集算法-工作机制

✔ 新创建的对象,都会先分配到eden区
✔ 当伊甸园内存不足,标记伊甸园与from(现阶段没有)的存活对象
✔ 将存活对象采用复制算法复制到to中,复制完毕后,伊甸园和from 内存都得到释放
✔ 经过一段时间后伊甸园的内存又出现不足,标记eden区域to区存活的对象,将存活的对象复制到from区
✔ 当幸存区对象熬过几次回收(最多15次),晋升到老年代(幸存区内存不足或大对象会导致提前晋升)
🏳️‍🌈 问题总结
一、堆的区域划分

1.堆被分为了两份:新生代和老年代[1:2]
2.对于新生代,内部又被分为了三个区域。Eden区,幸存者区survivor(分成from和to)(8:1:1)

二、对象回收分代回收策略

1.新创建的对象,会先分配到eden区(大对象直接分配到老年代)
2.当伊甸园内存不足,标记伊甸园与from(现阶段没有)的存活对象
3.将存活对象采用复制算法复制到to中,复制完毕后,伊甸园和from 内存都得到释放
4.经过一段时间后伊甸园的内存又出现不足,标记eden区域to区存活的对象,将其复制到from区
5、当幸存区对象熬过几次回收(最多15次),晋升到老年代(幸存区内存不足或大对象会提前晋升)
📖 问题信息
📈 浏览次数:11 | 📅 更新时间:2025-12-15 05:35:57
📦 创建信息
🏷️ ID:138 | 📅 创建时间:2025-02-01 20:07:15