面试题答案
一键面试标记 - 清除算法
- 工作原理:
- 标记阶段:从根对象(如栈中的引用、静态变量等)开始遍历,标记所有被引用的对象。
- 清除阶段:遍历堆内存,回收所有未被标记的对象,即垃圾对象。
- 优点:
- 实现简单,不需要额外的空间。
- 缺点:
- 效率问题:标记和清除过程的效率不高,尤其是在大规模对象的情况下。
- 空间问题:会产生大量不连续的内存碎片,导致后续大对象分配可能因无法找到连续内存空间而提前触发垃圾回收。
标记 - 整理算法
- 工作原理:
- 标记阶段:同标记 - 清除算法,从根对象开始标记所有被引用的对象。
- 整理阶段:将所有存活的对象向内存的一端移动,然后直接清除边界以外的内存。
- 优点:
- 解决了标记 - 清除算法产生内存碎片的问题,使得后续内存分配更高效。
- 缺点:
- 整理过程需要移动对象,涉及到对象地址的改变,效率相对较低,尤其是在对象数量较多的情况下。
复制算法
- 工作原理:
- 将内存分为大小相等的两块,每次只使用其中一块。当这一块内存用完时,将存活的对象复制到另一块,然后清除当前使用的这块内存。
- 优点:
- 效率高,每次只需要清理一块内存,并且不存在内存碎片问题。
- 实现简单,只需进行对象复制操作。
- 缺点:
- 内存利用率低,因为始终有一半的内存处于空闲状态,在对象存活率较高时,复制操作频繁且成本高。