【405、垃圾收集算法有哪些?如何判断一个对象是否已经死亡?】

60 阅读1分钟

垃圾收集算法主要有以下几种:

  1. 标记-清除算法:标记阶段标记出所有需要回收的对象,清除阶段将这些对象回收。
  2. 复制算法:将内存分为两块,每次只使用其中的一块,当这一块内存使用完后,将还存活的对象复制到另外一块内存中,然后清空这一块内存,将两个内存空间交换,如此反复。
  3. 标记-整理算法:标记出所有需要回收的对象,然后将所有存活的对象移动到一端,清理掉另外一端的内存。
  4. 分代收集算法:根据对象的存活周期,将内存划分为不同的区域,分别使用不同的垃圾收集算法。

判断一个对象是否已经死亡,通常使用“可达性分析算法”。在 Java 中,如果一个对象不再被任何其他对象引用,那么这个对象就可以被回收。具体地说,当一个对象的引用链不可达(即从一组根对象开始,无法通过引用链访问到该对象),就可以被判定为已经死亡,可以被垃圾回收器回收。Java 中的根对象包括:虚拟机栈中引用的对象,类静态属性引用的对象,常量池中引用的对象,以及 JNI 中引用的对象。因此,只要一个对象不再与这些根对象关联,就可以被回收。