zl程序教程

您现在的位置是:首页 >  后端

当前栏目

JVM 中的 GC Roots 和可达链

JVM GC
2023-09-14 09:07:23 时间

什么是GC Root 对象?

简单讲,凡是被常量、静态变量、全局变量、运行时方法中的变量直接引用的对象,原则上不能被GC释放。

JVM中对内存进行回收时,需要判断对象是否仍在使用中,可以通过 GC Roots Tracing辨别。

GC Roots 定义:

通过一系列名为”GCRoots”的对象作为起始点,从这个节点向下搜索,搜索走过的路径称为ReferenceChain,当一个对象到GCRoots没有任何ReferenceChain相连时,(图论:这个对象不可到达),则证明这个对象不可用。

可以作为GC Root 引用点的是:

JavaStack中的引用的对象。
方法区中静态引用指向的对象。
方法区中常量引用指向的对象。
Native方法中JNI引用的对象。

所谓“GC roots”,或者说tracing GC的“根集合”,就是一组必须活跃的引用。

Tracing GC的根本思路就是:给定一个集合的引用作为根出发,通过引用关系遍历对象图,能被遍历到的(可到达的)对象就被判定为存活,其余对象&#x