对象被判定为垃圾的标准:
没有被其他对象引用
判定对象是否为垃圾的算法:
引用计数算法
可达性分析算法
引用计数算法
-
判断对象的的引用数量:
-
通过判断对象的引用数量来决定对象是否可以被回收
每个对象实例都有一个引用计数器,被引用+1,完成引用-1
任何引用计数为0的对象实例可以被当作垃圾收集
几乎不打断程序执行,对实时性要求高的程序有利
-
优点:
- 执行效率高,程序执行受影响较小 缺点:
-
无法检测出循环引用的情况,导致内存泄漏
父调子,子在调父,无法回收
可达性分析算法
-
可以作为GC Root的对象
-
虚拟机栈中引用的对象(栈帧中的本地变量表)
方法区中的常量引用对象
方法区中的静态属性引用的对象
本地方法栈中JNI(Native 方法)的引用对象
活跃线程的外用对象