GC Roots 的对象:
虚拟机栈(栈帧中的本地变量表)中引用的对象;各个线程调用方法堆栈中使用到的参数、局部变量、临时变量等。
方法区中类静态属性引用的对象;java 类的引用类型静态变量。
方法区中常量引用的对象;比如:字符串常量池里的引用。
本地方法栈中 JNI(即一般说的 Native 方法)引用的对象。
JVM 的内部引用(class 对象、异常对象 NullPointException、OutofMemoryError,系统类加载器)。(非重点)
所有被同步锁(synchronized 关键)持有的对象。(非重点)
JVM 内部的 JMXBean、JVMTI 中注册的回调、本地代码缓存等(非重点)
JVM 实现中的“临时性”对象,跨代引用的对象
1条回答 默认 最新
关注 让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
问题解答: GC Roots 是垃圾回收算法中用于标记对象是否存活的关键对象,只有被标记为 GC Roots 的对象才会保留,否则就会被垃圾回收器清理掉。下面介绍几种可能成为 GC Roots 的对象:- 虚拟机栈中引用的对象:栈帧中的本地变量表中引用的对象,包括各个线程调用方法堆栈中使用到的参数、局部变量、临时变量等。例如:
public void test(){ Object obj = new Object(); // obj 变量存储在虚拟机栈的本地变量表中, obj 对象就是 GC Roots 对象之一 // 其他代码逻辑 }
- 方法区中静态属性引用的对象:方法区中类静态属性引用的对象,即java类的引用类型静态变量。例如:
public class MyClass { private static Object staticObj = new Object(); // staticObj 对象就是 GC Roots 对象之一 }
- 方法区中常量引用的对象:方法区中常量引用的对象,如字符串常量池里的引用。例如:
public class MyClass { private final static String MY_NAME = "张三"; // MY_NAME 字符串对象就是 GC Roots 对象之一 }
- 本地方法栈中 JNI 引用的对象:本地方法栈中 JNI 引用的对象,即一般说的 Native 方法引用的对象。例如:
public class MyClass { static { System.loadLibrary("mylib"); // 加载本地库 } native void test(); // 本地方法 }
- JVM 的内部引用:JVM 的内部引用,包括 class 对象、异常对象 NullPointException、OutofMemoryError 和系统类加载器等。例如:
public class MyClass { static { ClassLoader classLoader = getClass().getClassLoader(); // classLoader 对象就是 GC Roots 对象之一 } }
- 所有被同步锁 (synchronized 关键字) 持有的对象:所有被同步锁持有的对象。例如:
public class MyClass { static Object lockObj = new Object(); public void test() { synchronized (lockObj) { Object obj = new Object(); // obj 对象就是 GC Roots 对象之一 // 其他代码逻辑 } } }
除上述对象外,还有一些不太常用的对象可能也成为 GC Roots,例如 JVM 内部的 JMXBean、JVMTI 中注册的回调、本地代码缓存等,以及 JVM 实现中的“临时性”对象和跨代引用的对象。但这些都算是非重点的内容。 综上所述,GC Roots 是垃圾回收算法中的重要概念,可能成为 GC Roots 的对象包括:虚拟机栈中引用的对象、方法区中静态属性引用的对象、方法区中常量引用的对象、本地方法栈中 JNI 引用的对象、JVM 的内部引用,以及所有被同步锁持有的对象。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
- ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
- ¥15 Centos / PETSc / PETGEM
- ¥15 centos7.9 IPv6端口telnet和端口监控问题
- ¥120 计算机网络的新校区组网设计
- ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
- ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
- ¥20 海浪数据 南海地区海况数据,波浪数据
- ¥20 软件测试决策法疑问求解答
- ¥15 win11 23H2删除推荐的项目,支持注册表等