分代收集模型通过按对象年龄划分新生代和老年代,将全局GC拆解为局部高频任务:Minor GC仅处理少量短命对象,停顿短、效率高;Major/Full GC低频触发,行为可预测。

分代收集模型之所以能简化GC实现,核心在于它把一个复杂、全局的垃圾回收问题,拆解成多个局部、高频且行为可预测的小任务。
对象生命周期差异提供了天然切分依据
Java程序中绝大多数对象“朝生夕灭”——刚创建不久就不再被引用;只有极少数对象能长期存活。这种分布不是偶然,而是由业务逻辑和编程习惯决定的。分代模型直接利用这一规律,把堆按对象年龄粗略划为新生代和老年代,避免对所有对象一视同仁地扫描。
减少每次GC需处理的对象数量
Minor GC只扫描新生代(默认占堆1/3),而新生代里90%以上对象在第一次GC时就死亡。这意味着:
- 标记阶段遍历的对象少,停顿时间短
- 复制算法只需维护Eden + 两个Survivor区,无需处理整个堆的碎片整理
- 不用追踪跨代引用(老年代→新生代的引用极少,用卡表等轻量机制即可维护)
算法选择更专注、更高效
- 新生代用复制算法:适合大量死亡对象场景,回收后空间连续,无碎片,实现简单
- 老年代用标记-整理或标记-清除:针对低频、长生命周期对象,侧重空间利用率和稳定性
两种策略各自优化,不必妥协设计一个通用但低效的算法
GC触发条件更明确、更可控
- Minor GC由Eden区满触发,机制单一,易于监控和调优
- Major GC或Full GC频率低,仅在老年代空间不足等明确条件下发生
相比全堆扫描,这种分级触发让JVM行为更可预期,也降低了GC线程与用户线程协同的复杂度

















