8:1:1是新生代空间分配的优化比例,非硬性规定,旨在匹配对象“朝生夕死”的真实分布:eden占80%高效承载短命对象,两个survivor各10%协同完成存活对象暂存、年龄筛选与复制腾挪,兼顾gc频率、老年代压力、内存连续性及空间利用率。

8:1:1不是硬性规定,而是针对“绝大多数对象朝生夕死”这一真实分布特征做的空间权衡。它让Eden区承担主要分配任务,两个Survivor区协同完成存活对象的暂存与年龄筛选,既避免频繁GC,又防止老年代过早膨胀。
匹配对象生命周期的真实分布
实测数据显示,约90%~98%的新建对象在第一次Minor GC时就已死亡。Eden占新生代80%,正好为这批短命对象提供充足、无需复制的分配空间;两个Survivor各占10%,只为承接那少量幸存者——容量够用,又不浪费。
- 若Eden太小(比如比例降到5:1:1),短期对象很快填满,Minor GC频次上升,STW时间累积影响响应延迟
- 若Survivor太小(比如5%),存活对象装不下,只能提前晋升到老年代,加重Full GC压力
支撑复制算法并保持内存连续
Minor GC采用复制算法,要求目标区域必须为空。双Survivor区(S0/S1)角色互换:每次GC时,Eden + 当前From区的存活对象全部复制到干净的To区,之后清空源区。这种设计天然规避碎片,也无需复杂整理。
- 只有一个Survivor区的话,要么无法清空(导致碎片堆积),要么必须预留大量冗余空间(降低利用率)
- 两个大小相等的Survivor区,保证始终有一个空区可用,复制过程简洁高效
控制晋升节奏,缓解老年代压力
对象每在Survivor间成功转移一次,年龄+1;默认阈值是15,意味着至少活过15轮GC才进老年代。10%的Survivor容量,足够容纳多轮暂存,避免因空间不足被迫“早熟晋升”。
- Survivor区本质是“年龄缓冲带”,不是长期存储区
- 合理比例让JVM有足够观察窗口判断对象是否真具长生命周期
兼顾空间利用率与GC吞吐平衡
按8:1:1划分,新生代中90%的空间(Eden 80% + 一个空闲Survivor 10%)始终可用于新对象分配,空间利用效率高;同时保留了复制腾挪所需的弹性。
- 调大Survivor比例(如4:1:1),虽利于中生命周期对象,但Eden变小会抬高GC频率
- 取消Survivor或设为0,则所有存活对象直送老年代,系统很快陷入Full GC风暴
- 该比例在Parallel GC下默认生效,在G1/ZGC等现代收集器中由运行时动态管理,不强制遵循











