JVM中GC Root对象有哪些?

众所周知,我们目前最常用的虚拟机hotspot使用可达性分析来进行垃圾回收,而可达性分析需要依赖GC Root。下面我就来介绍下可以作为GC Root的对象。

(一)虚拟机栈中引用的对象
虚拟机栈中的引用的对象可以作为GC Root。我们程序在虚拟机的栈中执行,每次函数调用调用都是一次入栈。在栈中包括局部变量表和操作数栈,局部变量表中的变量可能为引用类型(reference),他们引用的对象即可作为GC Root。不过随着函数调用结束出栈,这些引用便会消失。

(二)方法区中类静态属性引用的对象
简单的说就是我们在类中使用的static声明的引用类型字段,例如:

Class Dog {
    private static Object tail;
} 

(三)方法区中常量引用的对象
简单的说就是我们在类中使用final声明的引用类型字段,例如:

Class Dog {
    private final Object tail;
} 

(四)本地方法栈中引用的对象
就是程序中native本地方法引用的对象。

发布了477 篇原创文章 · 获赞 588 · 访问量 267万+

猜你喜欢

转载自blog.csdn.net/qq_15037231/article/details/102081075
今日推荐