当前位置: 首页 > news >正文

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

在 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 判断哪些对象是可达的,从而决定哪些对象可以被回收。理解根对象是优化内存使用和管理的重要一环。

相关文章:

  • day_49
  • 代码断点调试
  • LLM 直接偏好优化(DPO)的一些研究
  • springboot框架中filter过滤器的urlPatterns的匹配源码
  • Oracle(81)如何生成AWR报告?
  • 链动 2+1 模式小程序 AI 智能名片商城源码培训邀约策略研究
  • Springsecurity 自定义AuthenticationManager
  • RocketMQ Dashboard
  • 【大数据】什么是数据中台?
  • 【HarmonyOS 4.0】基础组件
  • 海山数据库(He3DB)源码详解:He3DB-XLogWrite函数
  • 揭秘CAAC、AOPA、ALPA、ASFC和UTC无人机执照的差别及实用价值
  • MySQL的延迟复制
  • MySQL存储过程详细讲解和常见问题及性能优化
  • QT opencv(显示图片和视频)
  • 深入了解以太坊
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • ECMAScript6(0):ES6简明参考手册
  • Effective Java 笔记(一)
  • ES6 ...操作符
  • HashMap剖析之内部结构
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • rabbitmq延迟消息示例
  • Rancher-k8s加速安装文档
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • uni-app项目数字滚动
  • V4L2视频输入框架概述
  • vue脚手架vue-cli
  • 构建工具 - 收藏集 - 掘金
  • 关于Flux,Vuex,Redux的思考
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​iOS实时查看App运行日志
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​数据链路层——流量控制可靠传输机制 ​
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2)STL算法之元素计数
  • (6)STL算法之转换
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (六)激光线扫描-三维重建
  • (三)终结任务
  • (四)模仿学习-完成后台管理页面查询
  • (五)关系数据库标准语言SQL
  • (一)UDP基本编程步骤
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • *ST京蓝入股力合节能 着力绿色智慧城市服务