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

JVM学习——Gc Roots

一、GC Roots 通俗理解

GC Roots(垃圾回收根节点)是 Java 垃圾回收(GC)机制的核心判断依据,可以把它理解成:

JVM 内存中 “不会被回收的固定锚点”,所有能直接 / 间接被 GC Roots 引用的对象,都是 “存活对象”;反之,无法被 GC Roots 关联的对象,就是 “垃圾对象”,会被 GC 清理。

打个比方:GC Roots 就像大树的 “主根”,所有和主根相连的 “枝干 / 叶子”(对象引用)都是活的,断了连接的叶子就会被清理。

二、GC Roots 包含哪些类型(核心分类)

只有以下几类对象能成为 GC Roots,记这 4 类核心即可:

  1. 虚拟机栈(栈帧)中的局部变量 / 参数

    比如方法执行时,方法里定义的对象引用(

    User user = new User()

    中的 user),只要方法还在运行,这个引用就是 GC Roots。

  2. 方法区中的静态变量

    类的静态成员变量(

    public static User instance;

    ),因为类的静态变量属于类本身,类加载后一直存在,所以是 GC Roots。

  3. 方法区中的常量引用

    比如字符串常量池里的常量(

    final String NAME = "张三"

    ),常量不会被回收,对应的引用也是 GC Roots。

  4. 本地方法栈中的本地方法(JNI)引用

    调用 C/C++ 本地方法时,本地方法持有的 Java 对象引用(比如 Java 调用 Native 方法传递的对象)。

三、GC Roots 工作原理

publicclassGCRootsDemo{// 静态变量 → 属于 GC RootspublicstaticUserstaticUser=newUser();publicvoidtest(){// 局部变量 → 属于 GC Roots(方法执行时)UserlocalUser=newUser();// 临时变量 → 方法执行完后,localUser 出栈,不再是 GC RootslocalUser=null;}}classUser{}

staticUser是静态变量,永远属于 GC Roots,它引用的User对象不会被回收;

localUsertest()方法执行时是 GC Roots,方法执行结束后,localUser从栈帧中消失,若此时没有其他引用指向这个User对象,该对象就会被判定为垃圾。

http://www.jsqmd.com/news/497723/

相关文章:

  • BNU-25硕信息学奥赛day5
  • 神经网络与卷积神经网络(CNN)
  • 从零搭建 Java 养老代办服务系统:预约、护理、陪诊一体化
  • 与系统库同名python脚本文件引起的奇怪错误及其解决
  • 因缺乏具体资讯内容无法生成标题
  • Claude Code 命令大全
  • RAG相关知识点总结
  • 三星Galaxy S26系列,解锁科技新体验
  • 高校课题结题必须提供第三方软件测试报告吗?有哪些文件依据?
  • 2026年百家号代运营可靠服务商推荐榜:爱采购开户哪家好/爱采购开户哪家强/爱采购开户哪家靠谱/爱采购服务商咱们联系/选择指南 - 优质品牌商家
  • 2026年全球视野下的高端网站建设公司综合实力评析与选型指南
  • 保姆级教程!STM32 开发工具下载,新手也能一次搞定
  • ASR学习路径(音频算法工程师专属)
  • 2026制造业爱采购服务优质品牌推荐指南:衡水爱采购服务商/衡水百度爱采购/AI营销/GEO发展趋势/GEO哪家好/选择指南 - 优质品牌商家
  • ECS框架-输入管理信号系统
  • 平滑与断裂之间:S4-Info-Yi系统的哲学突破与数学挑战
  • 微信自动化机器人开发
  • Linux 入门学习
  • 2026食品饮料行业紫外杀菌光源推荐榜:222nm紫外灯、UV杀菌器、不锈钢杀菌器、大功率紫外灯、水处理杀菌器选择指南 - 优质品牌商家
  • 2026年最新电流互感器十大品牌排名与选型指南
  • 用阿里云开通短信服务
  • 新能源并网必装!电能质量在线监测装置:谐波、不平衡、电压扰动全监测,守住企业收益
  • Java 性能天花板:JIT 即时编译、分层编译与代码缓存深度调优指南
  • 抖音获客软件是真的吗?一文讲清真相
  • 当 AI 不再只 “聊天”:OpenClaw 的核心体验革新​
  • 建议收藏|8个降AI率工具测评:开源免费必看,助你轻松过关
  • 高性价比国产千兆网口芯片PT153S|PT153S直接替代RTL8153设计原理图|PT153S参数与性能
  • 如何使用 MySQL 的 EXPLAIN 语句进行查询分析?
  • 535353
  • 云平台测试实战:AWS Lambda性能深度调优策略