如何判断对象仍然存活?

有两种方式,引用计数算法(reference counting)和可达性分析算法。

  • 引用计数算法

引用计数器的算法是这样的:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。

jvm-17.png

  • 可达性分析算法

目前,主流的Java虚拟机采用的是可达性分析算法来进行垃圾回收。该算法的核心思想是通过一组GC Roots作为起始点,构建初始的存活对象集合(即GC Root Set)。然后从这个集合开始,探索所有可以从GC Roots引用到的对象,并将它们添加到该集合中,这个过程被称为标记(mark)阶段。最终,未被探索到的对象被视为不可达的,即已经死亡,可以被回收。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题