JVM 在GC 时的根对象都有那些

embedded/2024/9/24 16:26:45/

在 Java 的垃圾回收(Garbage Collection,GC)过程中,根对象(Roots)是用于判断哪些对象是可达的基础。根对象通常是一组特定的对象引用,从这些对象出发,GC 可以判断哪些对象仍然存活,哪些对象可以被回收。以下是 Java 中常见的根对象类型:

1. 栈帧中的局部变量

  • 每个线程在执行方法时都有自己的栈帧,局部变量和输入参数的引用在栈帧中,属于根对象。
  • 当方法调用结束,局部变量会被销毁,栈帧也会被清理。

2. 静态字段

  • 静态字段是属于类的变量,它们在类加载时被存储在方法区。只要类被加载,静态字段的引用通常不会被 GC 回收。
  • 例如:public static MyClass staticInstance;

3. JNI 引用

  • 在 Java Native Interface (JNI) 中保存的对象引用也是根对象。这些引用来自于本地代码(通常是用 C 或 C++ 编写)并且被 JVM 执行时引用。

4. 常量池中的引用

  • 字符串常量和其他字面量常量(例如,整型常量)也可以视为根对象。比如在字符串池中常量的存在。

5. 程序计数器

  • JVM 在执行线程分配的计数器,包含当前线程正在执行的字节码的地址,它也包含指向栈帧的引用。

6. 长时间运行的对象

  • 如 singleton(单例模式)中持有的对象,即使不在局部变量或静态字段中也可能被视为根对象。

7. Thread 引用

  • 活动线程的引用也被视为根对象,线程在运行时可能会持有对其他对象的引用。

8. 软引用和弱引用的引用队列

  • 在使用软引用(SoftReference)和弱引用(WeakReference)时,如果这些对象添加到引用队列(ReferenceQueue),它们的引用也可以被视为根对象。

总结

在 Java GC 的可达性分析中,根对象是关键起点,以下是其主要类型:

  1. 栈帧中的局部变量
  2. 静态字段
  3. JNI 引用
  4. 常量池中的引用
  5. 程序计数器
  6. 长时间运行的对象
  7. Thread 引用
  8. 软引用和弱引用的引用队列

这些根对象可帮助 GC 判断哪些对象是可达的,从而决定哪些对象可以被回收。理解根对象是优化内存使用和管理的重要一环。


http://www.ppmy.cn/embedded/102132.html

相关文章

如果一个函数func定义在namespace sggk::test中,pre类定义在namespace sggk中,那么func能否调用类pre

在C中,如果一个函数func定义在命名空间sggk::test中,而类pre定义在命名空间sggk中,那么func函数可以调用pre类,但需要通过适当的命名空间解析来访问它。 有几种方式可以实现这一点: 使用完全限定名:在func函…

Dashboard Interface 应用

Dashboard Server Remote Control Interface(简称Dashboard Interface)是一个关键的功能,它为用户提供了通过TCP/IP协议远程控制机器人的能力,执行包括开关机、加载程序、检查机器人状态以及设置机器人操作模式等多种操作。 功能…

不动产登记证识别API开发文档、不动产登记证识别接口

调用客户端运行环境 当客户端使用的编程语言为Java时,请使用1.5及以上版本JRE。 服务主要功能描述:翔云不动产登记证识别,可自动、批量识别不动产登记证明中的权利人、共有情况、用途、权利性质、使用期限等文字信息。 1) 通过https协议po…

C# 使用OpenCV 类VideoCapture 和 Mat的正确方法

在做WPF桌面程序时候&#xff0c;要调用USB摄像头&#xff0c;因此接触了OpenCV , 遇到了各种坑&#xff0c;严重烧肝终于找到原因。 涉及的类包括VideoCapture , Mat. 问题1.内存泄漏 运行以下 代码片段&#xff0c;会发现内存持续飙升 for (int i 0; i < 1000; i){us…

人工数据的没落:APIGen的崛起

APIGen全面解析 ©作者|Angela 来源|神州问学 引言 在现代软件工程中&#xff0c;确保应用程序的质量和可靠性已经变得至关重要。高质量的测试数据是实现这一目标的基石。Salesforce AI Research团队近日宣布&#xff0c;他们已成功开发出一种名为APIGen的创新技术&#…

游戏发行技术体系框架图

有朋友问&#xff0c;不知道各个模块之间的关系。简单画个框架图&#xff1a; 几个注意事项&#xff1a; 测试和运维是覆盖全周期的其它的可以根据是否相邻判断业务相关。三方理论上应该都有SDK接入。 存在一部分三方SDK从业务角度无需经过SDK&#xff0c;游戏较少或排期紧张…

水库大坝预警系统的力量

在自然界与人类社会的和谐共生中&#xff0c;水库作为重要的水利基础设施&#xff0c;不仅承担着防洪、灌溉、供水、发电等多重功能&#xff0c;更是保障民生安全、促进经济发展的生命线。然而&#xff0c;水库大坝一旦遭遇极端天气、地质灾害或管理不善等因素&#xff0c;其安…

一文get透欧美搜索套利offer推广OutBrain原生广告优势分析

解锁数字营销新境界&#xff1a;欧美搜索套利下的OutBrain原生广告优势深度剖析 在数字营销日新月异的今天&#xff0c;如何精准触达目标受众&#xff0c;实现高效转化&#xff0c;成为众多品牌与广告主关注的焦点。特别是在欧美市场&#xff0c;搜索套利&#xff08;Search Ar…