赞
踩
《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》一书中提到的 GC Roots 为:
1.虚拟机栈(栈帧中的本地变量表)中引用的对象;
2.方法区中的类静态属性引用的对象
3.方法区中的常量引用的对象
4.原生方法栈(Native Method Stack)中 JNI 中引用的对象。
GC Roots,其主要目的在于根据可达性分析算法,判断对象是否可以被回收。
什么是虚拟机栈中引用的对象?
虚拟机栈是线程私有,其最小单位是栈帧,在其中引用的对象即当前线程正在使用的对象
什么是方法区中的类静态属性引用的对象及常量引用的对象?
经过类的加载阶段,会在方法区中形成关于该类的数据结构,以存储类的相关信息,而类的相关信息中,自然包括类的静态属性引用及常量引用的对象,他们都是线程共享的,在当前线程访问他们引用的对象时,就必须存在。
从上述的介绍,可顺其自然的了解到为什么他们可以被定义为可达性分析算法中的GC Roots了。
因为他们是当前线程需要的,必须存在于虚拟机的内存中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。