GC root的确定由来

《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》一书中提到的 GC Roots 为:
       1.虚拟机栈(栈帧中的本地变量表)中引用的对象;
       2.方法区中的类静态属性引用的对象
       3.方法区中的常量引用的对象
       4.原生方法栈(Native Method Stack)中 JNI 中引用的对象。

GC Roots,其主要目的在于根据可达性分析算法,判断对象是否可以被回收。

什么是虚拟机栈中引用的对象?

虚拟机栈是线程私有,其最小单位是栈帧,在其中引用的对象即当前线程正在使用的对象

什么是方法区中的类静态属性引用的对象及常量引用的对象?

经过类的加载阶段,会在方法区中形成关于该类的数据结构,以存储类的相关信息,而类的相关信息中,自然包括类的静态属性引用及常量引用的对象,他们都是线程共享的,在当前线程访问他们引用的对象时,就必须存在。

从上述的介绍,可顺其自然的了解到为什么他们可以被定义为可达性分析算法中的GC Roots了。

因为他们是当前线程需要的,必须存在于虚拟机的内存中。

猜你喜欢

转载自blog.csdn.net/qq_41895761/article/details/87454607
GC
今日推荐