JVM中GC Root对象有哪些

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

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

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

Class Dog {
    private static Object tail;
}
 
        
 
 
        
 1
         
  2
         
  3

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

Class Dog {
    private final Object tail;
}
 
        
 
 
        
 1
         
  2
         
  3

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

经验分享 程序员 微信小程序 职场和发展