垃圾收集算法有哪几种?各有什么优缺点?
先自己想一想,再看参考要点
参考要点
- 标记 - 清除:从 GC Roots 出发标记存活对象,清除没有标记的,不移动对象,但会产生内存碎片,空闲总量够也可能放不下大对象
- 标记 - 整理:把存活对象移向一端,没有碎片,但要搬移对象、修改所有引用
- 复制:每次只用一半内存,耗时只与存活对象的多少有关,新生代实际用一块 Eden 和两块 Survivor(Serial 默认 8:1:1)
- 分代收集:依据弱分代假说,新生代用复制,老年代用标记 - 清除(CMS)或标记 - 整理(Parallel Old)
- 老年代引用新生代的对象时,用卡表标记脏卡,Minor GC 只扫描脏卡,不扫描整个老年代