当前位置:   article > 正文

GC root的确定由来_gcroot为什么这么选

gcroot为什么这么选

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

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

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/520364
推荐阅读
相关标签
  

闽ICP备14008679号