JVM判断对象是否可以回收采用的不是引用计数法,而是可达性分析算法,而通过什么能够判断对象是否可达呢,就是一系列称为GC Roots的对象。
可达性算法介绍
算法基本思路就是通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。就是可以回收的。
GC Roots所包含的对象
java中,可作为GC Roots的对象包括下面几种
- 虚拟机栈(栈帧中的本地变量表)中引用的对象。
- 方法区中类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法中JNI(即一般说的Native方法)引用的对象。
想了解更多技术文章信息,请继续关注wiliam.s Blog,谢谢,欢迎来访!
参考资料
《深入理解Java虚拟机:JVM高级特性与最佳实践》·周志明著·第二版