面试题答案
一键面试标记 - 清除算法
- 工作原理:
- 标记阶段:从根对象集合(如栈中的局部变量、静态变量等引用)出发,遍历所有对象,标记所有被引用的对象。
- 清除阶段:遍历堆内存,回收所有未被标记的对象,即垃圾对象,释放它们占用的内存空间。
复制算法
- 工作原理:
- 将可用内存按容量划分为大小相等的两块,每次只使用其中一块。
- 当这一块内存用完时,就将还存活的对象复制到另一块上面,然后把已使用过的内存空间一次性清理掉。
标记 - 整理算法
- 工作原理:
- 标记阶段:与标记 - 清除算法的标记阶段相同,从根对象出发,标记所有存活的对象。
- 整理阶段:将所有存活的对象向一端移动,然后直接清理掉边界以外的内存,使得存活对象占用的内存是连续的,避免产生内存碎片。
分代收集算法
- 工作原理:
- 根据对象存活周期的不同将内存划分为几块,一般把Java堆分为新生代和老年代。
- 新生代中对象朝生夕灭,使用复制算法,因为存活对象少,复制成本低。
- 老年代中对象存活率高,使用标记 - 清除或标记 - 整理算法,根据具体情况选择,以减少内存移动带来的开销。