现在主流的jdk都采用了gcroot算法,那么哪些可以作为 GC Roots;


jvm中判断对象是否清理的一种方法是可达性算法.

可达性算法就是采用GC Roots 为根节点, 采用树状结构,向下搜索.如果对象直接到达GC Roots ,中间没有任何中间节点.则判断对象可回收. 而堆区是GC的重点区域,所以堆区不能作为GC roots

因为可达性算法的特性,所以可以在gc接触不到的地方作为GC Roots

1.虚拟机栈(栈帧中的本地变量表)中引用的对象;

2.方法区中的类静态属性引用的对象;

3.方法区中常量引用的对象;

4.本地方法栈中JNI(即一般说的Native方法)中引用的对象
 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐