现在主流的jdk都采用了gcroot算法,那么哪些可以作为 GC Roots;
jvm中判断对象是否清理的一种方法是可达性算法.
可达性算法就是采用GC Roots 为根节点, 采用树状结构,向下搜索.如果对象直接到达GC Roots ,中间没有任何中间节点.则判断对象可回收. 而堆区是GC的重点区域,所以堆区不能作为GC roots
因为可达性算法的特性,所以可以在gc接触不到的地方作为GC Roots
1.虚拟机栈(栈帧中的本地变量表)中引用的对象;
2.方法区中的类静态属性引用的对象;
3.方法区中常量引用的对象;
4.本地方法栈中JNI(即一般说的Native方法)中引用的对象
可达性算法是垃圾收集器判断Java对象是否存活的关键,它通过GCRoots作为起点进行遍历。GCRoots包括虚拟机栈、方法区的类静态属性和常量引用、本地方法栈中的JNI引用。如果对象无法从这些根节点达到,则认为对象可回收。这个过程对于有效管理堆内存至关重要。
1052

被折叠的 条评论
为什么被折叠?



