请问一下下面这种情况GC会回收这两个对象吗?

czrbijiben 2017-11-30 08:46:07

public class TestCase2 {
public static void main(String[] args) {
A a = new A();
B b = new B();
a.b = b;
b.a = a;
a = null;
b = null;
}
}

class A{
B b;

}
class B{
A a;
}

...全文
257 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2017-12-25
  • 打赏
  • 举报
回复
广寒月蛮兔 2017-12-01
  • 打赏
  • 举报
回复
gc如何查询到这个对象不被使用?这要涉及到堆栈两数据结构,对象不被引用指向,就无法使用了,所以自动回收
  • 打赏
  • 举报
回复
首先,
a = null;
        b = null;
这两行代码虽然各自置空引用,只是把栈内存指向堆内存的地址置空了。但是两个对象互相引用的事实并未改变,而java为什么能回收这种对象是因为java采用的是可达性分析算法进行内存回收。而该java使用该算法的目的就是针对这种循环引用的情况。
czrbijiben 2017-11-30
  • 打赏
  • 举报
回复
引用 2 楼 Pony887的回复:
会的,只要jvm检查到该对象不在被使用,就会回收
两个对象互相持有虽然外部没有其它持有的,,不过这应该也算被其他对象应用吧,
  • 打赏
  • 举报
回复
会的,只要jvm检查到该对象不在被使用,就会回收
李德胜1995 2017-11-30
  • 打赏
  • 举报
回复
会。。。。。。。。。。。。。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧