【垃圾回收】如何判断垃圾可回收?

本文介绍了引用计数法在垃圾回收中的应用,以及其遇到的循环引用问题。随后提出了可达性分析法,通过扫描堆内存找出根对象,有效处理了循环引用导致的垃圾回收难题,关注点包括SystemClass、NativeStack、线程局部变量和加锁对象。

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

1.引用计数法

记录每一个对象的引用次数,如果一个对象被其他变量所引用,那么这个变量的计数+1,如果这个对象被引用两次则计数为2。如果某一个变量不再引用它,那么计数就减一。如果减为0,那么就执行垃圾回收。但是这种情况有个问题,如果A引用B,B也引用A,存在循环引用,但是这两个对象没有人引用他们,但他们计数为1,这种情况下无法进行垃圾回收。

2.可达性分析法(针对上述问题,提出的解决方案)

可达性分析算法是判断哪些对象是根对象的算法,在垃圾回收之前对堆内所有对象进行扫描,首先要确定根对象,哪些可以作为根对象?

1.System Class 系统类(启动类加载器加载的类)

2.Native Stack 操作系统方法在使用时引用的java对象

3.Thread 活动线程中引用的一些对象(活动线程执行过程中,局部变量所引用的对象作为根对象)

4.Busy monitor 被加锁的对象Synchronize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值