JVM判断对象是否存活方法 以及 GC root集合

本文深入探讨了Java中垃圾回收的基本原理,包括引用计数和可达性分析两种方法。详细解析了GCroot的概念,列举了多种类型的GCroot,如虚拟机栈中的对象、方法区的静态属性和常量引用,以及JVM内部引用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用计数

  1. 优点:实现简单
  2. 缺点:难以解决对象循环引用的问题

可达性分析

  1. 对象是否与 GCroot 可达来判断对象将来是否会被使用

    基于图论观点:如果图的连通分量大于 GC root数量,那么就存在不可达的对象,不可达对象是Java编码用户 不可见,jvm运行时不可见的对象

Java中的GC root:

  1. 虚拟机栈(栈帧中的本地变量表)中的对象:方法堆栈用的参数,局部变量,临时变量等

  2. 方法区中的 类静态属性引用的变量 static

  3. 方法区中的 常量引用的对象:字符串常量池(String table)的引用

  4. Java虚拟机内部的引用:数据类型对应的class对象,常驻的异常对象,系统加载器等

  5. 所有被同步锁(synchronized关键字)持有的对象

  6. 反应Java虚拟机内部情况的 JMXBean,JVMTI中注册的回调,本地代码缓存等

  7. 不同内存区域,GC root标准不同导致的一些 临时性 加入的的对象等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值