java垃圾回收机制---面试的问题

本文探讨了Java垃圾回收机制中关于对象可达性和不可达性的概念,解释了即使两个对象互相引用,在没有外部引用的情况下,仍然可以被垃圾回收器正确识别并回收的过程。

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

面试过程中遇到一个问题:

 java 垃圾回收器,回收没有引用指向的对象实例,那如果是A->B,B->A这种就一直回收不了了吗?


Q: Does unreachable mean when there are no more references to the object?
A: No, but that is a common misunderstanding of garbage collection. You might think that the garbage collector keeps count of how many references there are to an object and then frees the object when the reference count is zero. However, it is easy to come up with a situation in which two objects need to be garbage collected, but each object has a reference to the other. If reference counting was being used, these two objects would never be freed.
问:当对象没有引用指向它时,就是unreachable吗?
答:不是,但这是关于垃圾回收的一个常见误解。你可能以为垃圾回收器会记录一个对象有多少个引用,当引用数为0时,就清理掉那个对象。但是,有一种很容易遇到的情况是,有2个对象需要被垃圾回收,但他们各自有一个指向对方的引用。如果使用引用数的话,这两个对象就永远不会被清理掉。

这两个对象, 如果没有第三方引用到其中之一, 也就是外界无法访问到这两对象

只有互相引用的话 

这两个对象会连在一起 成为垃圾

可以被回收

这两个对象虽然有相互的引用,但是他们两个是无法使用的,因为没有外部引用指向其中任何一个对象,原来这就是unreachable的含义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值