JVM · 单选题 · 第 26 题
Java 后端开发面试 · 第 26 题
分代收集中,新生代通常采用复制算法,主要原因是?
- A新生代的空间比老年代大得多,复制算法正好可以充分利用这些多出来的空间
- B新生代对象大多很快死亡,存活的少,复制代价低,而且不产生内存碎片
- C复制算法完全不需要预留额外的空间,内存利用率比标记-整理算法还要高
- D老年代对象太大无法移动,所以只有新生代能用,复制算法本身没有其他优势
答案
B B. 新生代对象大多很快死亡,存活的少,复制代价低,而且不产生内存碎片
解析
新生代每次 GC 只需把少量存活对象复制到 Survivor 区,然后整块清空 Eden,速度快且没有碎片。复制算法要预留空间,HotSpot 按 Eden:S0:S1 = 8:1:1 划分,只浪费 10%。老年代对象存活率高,复制成本大,所以多用标记-清除或标记-整理。