Java采用的是可达性分析算法
- 过程:从GC Roots开始向下搜索引用链,当一个对象没有与任何引用链相连时,则该对象是不可用的,那么虚拟机就判断该对象是可回收对象。
- GC Roots组成:
- 虚拟机栈的栈帧引用的对象,也即正在执行的方法使用的对象
- 本地方法栈的栈帧中引用的对象
- 方法区中的常量
- 方法区中的静态变量
扩展
还有一种很重要判断是否可以回收的算法,引用计数法
- 过程:每个对象有一个引用计数器,被其他对象引用就加1,释放引用就减1,当引用数为0时就可以回收
- 缺点:比如说,一个teacher对象保持着student对象的引用,这个student保持着对teacher的引用。即使这两个对象都不再使用了,但是引用计数器不为0无法回收
- 使用语言:Python