java 对象应用的问题
class CustomerB{
private CustomerA ca;
public void SetCustmerA(CustomerA a)
{
this.ca = a;
}
}
class CustomerA{
private CustomerB cb;
public void SetCustmerB(CustomerB a)
{
this.cb = a;
}
}
public class HelloData {
public HelloData() {
super();
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
CustomerB B = new CustomerB();
CustomerA A = new CustomerA();
B.SetCustmerA(A);
A.SetCustmerB(B);
B = null;
A = null;
}
}
jvm释放对象所占内存的是根据没有引用引用这个对象,就会将对象释放。
现在上面的程序,声明了两个类,并且每个类里面都申明了一个引用。
现在创建了CustomerB B = new CustomerB();
CustomerA A = new CustomerA();
这样A B 分别引用这个两个类
然后执行
B.SetCustmerA(A);
A.SetCustmerB(B);
这样CustomerB CustomerA中的属性就相互引用对方。
清除两个引用:
B = null;
A = null;
虽然A和B引用设为空,但是 a 和 b 原先引用的类里面的属性 相互引用,这样会不会导致CustomerB();CustomerA();永远遗留在内存里面,因为这个两个类的属性引用了对方??
谢谢大虾们的指教 !!!
------解决方案--------------------垃圾回收器实现了一种火车算法,可以解决这种循环引用的问题.
参见 <深入java虚拟机> 9.9火车算法