GC可达性分析回收算法 解决循环引用问题

JVM的引用计数算法无法解决循环引用问题,可达性分析算法通过GC Root对象避免这一问题。文章详细介绍了可达性分析算法的工作原理及不同类型的引用:强引用、软引用、弱引用和虚引用,强调它们在内存管理和垃圾回收中的角色和应用场景。

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

JVM有一个回收算法是引用计数算法,每当对象被引用一次,就+1,释放一个引用就-1,当垃圾回收时,引用计数为0的对象就会被GC掉。但这个方法有个问题,就是无法解决循环引用的问题。

循环引用就是对象A引用了对象B,对象B引用了对象A,构成了一个引用环。彼此都没发挥什么作用,但却不会被GC。为了解决这个问题,就有了可达性分析回收算法。

可达性分析:

算法中定义了几个GC Root对象,这几个root对象在GC时不会被JVM回收掉,然后通过这些对象像树枝一样向外延伸,被引用到的对象说明还存活使用,就不会被GC,没有被这些root对象引用到的就会被GC掉。从而解决了循环引用问题。

Root对象主要包括:

①系统类加载器(bootstrap)加载的类。

②JVM方法区中静态属性引用的对象。

③JVM常量池中引用的对象。

④JVM虚拟机栈中引用的对象。

⑤JVM本地方法栈中引用的对象。

⑥活动着的线程。

官方解释:

GC roots

The so-called GC (Garbage Collector) roots are objects special for garbage collector. Garbage collector collects those objects that are not GC roots and are not accessible by references from GC roots.

There are several kinds of GC roots. One object can belong to more than one kind of root. The root 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值