(面试题)如何判断对象可以被回收

9 阅读1分钟

Java采用的是可达性分析算法

  • 过程:从GC Roots开始向下搜索引用链,当一个对象没有与任何引用链相连时,则该对象是不可用的,那么虚拟机就判断该对象是可回收对象。
  • GC Roots组成
    • 虚拟机栈的栈帧引用的对象,也即正在执行的方法使用的对象
    • 本地方法栈的栈帧中引用的对象
    • 方法区中的常量
    • 方法区中的静态变量

扩展

还有一种很重要判断是否可以回收的算法,引用计数法

  • 过程:每个对象有一个引用计数器,被其他对象引用就加1,释放引用就减1,当引用数为0时就可以回收
  • 缺点:比如说,一个teacher对象保持着student对象的引用,这个student保持着对teacher的引用。即使这两个对象都不再使用了,但是引用计数器不为0无法回收
  • 使用语言:Python