对象A中有两个B类型的成员变量 class A{ B b1;
B b2;}
A a1=new A();
A a2=new A();
a2.b1=a1.b1
a1=null;这样 a1 和 a2中的b1都指向同一块内存
gc的时候,a1所占用的内存,此时a1所占用的内存b1还被引用,这样a1所占用的内存会释放掉吗。是不是只释放b2,b1不释放,还是整个a1的内存都不能释放?GC垃圾回收内存泄露内存Java
B b2;}
A a1=new A();
A a2=new A();
a2.b1=a1.b1
a1=null;这样 a1 和 a2中的b1都指向同一块内存
gc的时候,a1所占用的内存,此时a1所占用的内存b1还被引用,这样a1所占用的内存会释放掉吗。是不是只释放b2,b1不释放,还是整个a1的内存都不能释放?GC垃圾回收内存泄露内存Java
a1里面有b1的引用,现在把a1=null,但是a1里面的b1还a2引用着,这样a1能回收吗。
a1里面有b1的引用,现在把a1=null,但是a1里面的b1还a2引用着,这样a1能回收吗。a1里面的b1没有被a2引用着啊,这两个都是引用,指向同一个对象
a1里面有b1的引用,现在把a1=null,但是a1里面的b1还a2引用着,这样a1能回收吗。a1里面的b1没有被a2引用着啊,这两个都是引用,指向同一个对象
我的意思就是 原来a1里面的b1指向的对象还被a2.b1引用着,这样把a1=null后,整个a1能回收吗。
a2.b1 = a1.b1这句话,a2.b1并不是指向a1.b1,
而是指向了a1.b1所引用的内存地址(此内存取名为C),相当于此时a1.b1和a2.b1都引用了C,
a1 = null后,a1.b1对C的引用不存在了,而a2.b1此时终于媳妇熬成婆,可以独享C了。
如果存在根对象到一个对象的引用,那么这个对象就不能被回收。
a2不能被回收,a2中的b1就不能回收,b1中没有引用a1,所以a1可以回收
http://www.iteye.com/topic/244277
我是这么理解的。呵呵