java后端面经--gc垃圾回收

本文探讨了引用计数法在垃圾回收中的工作原理,以及可达性分析法如何通过gcroots确定对象生存。特别关注了gcroots对象类型、可达性分析的二次标记过程,以及Finalizer的作用和回收策略。

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

引用计数法:每个对象都有个引用计数属性,新建一个引用,计数增加,引用释放计数减1,计数为0时被回收(方便,但是对于相互引用的对象无效)
可达性分析法:从gc roots开始根据引用链向下搜索,当对象不在引用链,会被回收。

gc roots对象:(有哪些是gc roots)
1,虚拟机栈中的引用对象(就是指方法中new 的对象)
2,方法中静态属性引用对象
3,方法中常量引用对象
4,本地方法栈中JN引用的对象

可达性分析法:内部原理:
对象被回收需要两次标记
第一次,对象没有与gc roots相连的引用链,会被标记
第二次,在虚拟机中的Finalizer队列,判断是否需要用Finalizer()
(第二次分类:
1,没有覆盖Finalizer,直接回收
2,覆盖Finalizer(),
2.1,执行过Finalizer(),回到第一次,若还是没有引用链就回收
2,2 ,未执行过Finalizer(),放入队列中,进行执行
注意:Finalizer()代价高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值