读书人

java 对象应用的有关问题

发布时间: 2012-02-27 10:00:22 作者: rapoo

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火车算法

读书人网 >J2SE开发

热点推荐