【JVM调优实战】10-分代收集理论

📅 2026/7/18 23:57:32
【JVM调优实战】10-分代收集理论
分代收集理论:为什么需要分代本文是《JVM调优实战》专栏第 10 讲。在前两讲中,我们学会了判断对象死活,也掌握了三种基础 GC 算法。但你可能已经注意到一个问题:我们一直在说"新生代用复制算法"“老年代用标记-整理”,那 JVM 为什么要分代?不分代,直接对整个堆用一种算法不行吗?答案是:理论上行,实践中不行。不分代的 GC 就像用同一把扫帚既扫客厅又扫仓库——客厅里大部分是干净的(对象存活率高),仓库里大部分是垃圾(对象存活率低),用同一套策略处理两种截然不同的场景,效率必然低下。本讲我们就来回答分代收集的核心问题:为什么分代、跨代引用怎么处理、GC 何时安全开始。弱分代假说与强分代假说分代收集的理论基础来自两个经验假说:弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的,存活时间极短。强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象,就越难以消亡。这两个假说虽然叫"假说",但在大量真实应用中得到了反复验证。用一句话概括就是:新对象大概率很快死,老对象大概率继续活。基于这两个假说,JVM 将堆分为新生代(Young Generation)和老年代(Old Generation):维度