返回信息流```java
class A{
}
class B{
private A a;
B(A a){this.a=a;}
}
public class TestGarbage {
public static void main(String[] args){
A a =new A();
new B(a);
System.gc();
}
}
```
上述代码,在gc后,这个 new B(a)生成的对象会被回收吗
这是一条镜像帖。来源:北邮人论坛 / java / #55858同步于 2017/4/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
垃圾回收有关问题
liuyehcf
2017/4/5镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
```Java
class A{
}
class B{
private static final int _1M=1000000;
private A a;
private byte[] bytes;
B(A a){
this.a=a;
bytes=new byte[500*_1M];
}
}
public class TestGarbage {
public static void main(String[] args) throws InterruptedException{
while(true) {
A a = new A();
new B(a);
TimeUnit.SECONDS.sleep(2);
System.gc();
TimeUnit.SECONDS.sleep(2);
}
}
}
```
测了一下,会被回收,附上内存监视
【 在 liuyehcf 的大作中提到: 】
: [md]
: ```java
: class A{
: ...................
在显式调用System.gc()时,a应该是不会被回收的,毕竟还有强引用a指向该对象
【 在 ljcmeng 的大作中提到: 】
: 遍历节点的时候,由于没有对象持有B的引用,所以B会被回收。同样的,B被回收的话也没有对象会持有A的引用,A也会被回收
感觉b没有被引用,所以b会被回收,但是a还是要存在的。
假设gc真的生效了。如果gc下一行是A c = a;这不就gg了。
【 在 ljcmeng 的大作中提到: 】
: 遍历节点的时候,由于没有对象持有B的引用,所以B会被回收。同样的,B被回收的话也没有对象会持有A的引用,A也会被回收