- 在主流的商用程序语言(Java、C#,甚至包括前面提到的古老的Lisp)的主流实现中,都是通可达性分析(Reachability Analysis)来判定对象是否存活的。
- 这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连,(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。如下图所示,对象object5、object、object7虽然互相存关联,但是它们到GC Roots是不可达的,所以它们将会被判定为是可回收的对象。
- 在java语言中,可作为GC Roots的对象包括下面几种(主要在执行上下文中和全局性的引用):
1.虚拟机栈(栈中的本地变量表)中引用对象。
2.方法区中类静态属性引用对象。
3.方法区中处理引用对象。
4.本地方法栈中JNI引用对象。
其它
关注下方微信公众号,
回复:
JVM.code
欢迎加入交流群:451826376
更多信息:www.itcourse.top