分代收集理论是基于对象生命周期统计规律的经验总结:98%对象朝生夕灭,活不过首次minor gc;能撑过5次gc的对象多长期存活,验证了弱分代与强分代假说;晋升阈值15及动态年龄判定均源于实证数据适配。

分代收集理论不是凭空设计的机制,而是建立在大量真实程序运行数据之上的经验总结。它的合理性,直接由对象生命周期的统计规律支撑。
98%的对象“朝生夕灭”有实证
IBM 等机构长期跟踪 Java 应用发现:约 98% 的新创建对象,在第一次 Minor GC 时就已不可达;80%–95% 的对象甚至活不过一次 GC。这类对象集中在方法调用、循环体、HTTP 请求处理等场景中,比如临时 String、局部 ArrayList、DTO 实例等。
- 这意味着新生代只需扫描一小块内存(Eden + 一个 Survivor),就能回收绝大多数垃圾
- 也解释了为什么复制算法在这里高效——每次只搬极少数存活对象,清空整块区域即可
活过 5 次 GC 的对象大概率“老而不死”
数据同时显示:能撑过 5 次 Minor GC 的对象,后续继续存活的概率急剧上升;其中大部分最终会晋升到老年代,并长期驻留。例如缓存容器、连接池、单例服务实例、静态配置对象等。
- 这验证了“强分代假说”——高龄对象稳定性高,变动少,不值得高频扫描
- 因此老年代可拉长回收间隔,用标记类算法集中处理,虽单次耗时高,但整体开销更优
晋升阈值 15 并非硬性指标,而是动态适配的结果
默认年龄阈值设为 15,并非数学推导所得,而是基于历史统计:绝大多数能活到 15 次 GC 的对象,基本已进入稳定期;再往上提升阈值,对降低晋升频率收益极小,反而增加 Survivor 区压力。
- JVM 还引入动态年龄判断:当某年龄及以上对象总和超过 Survivor 空间一半,就提前晋升——这是对统计偏差的实时响应
- 大对象(如 >2MB 的数组)直接进老年代,也是为避开复制开销,符合“大而稳”的实际分布
不同应用类型存在差异,但整体趋势稳定
Web 服务类应用中,短命对象比例常达 95% 以上;批处理或大数据计算任务中,中生命周期对象略多,但“两极分化”特征依然显著——极短命与极长存占主导,中间段稀疏。
- 这种分布使分代结构具备广泛适应性,而非仅适配某种特定业务
- ZGC、Shenandoah 等新一代收集器弱化分代刚性,但仍未抛弃“按存活时间分组管理”的核心思想











