java 对象应用的问题

bluecolossus 2007-09-11 10:34:39
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();永远遗留在内存里面,因为这个两个类的属性引用了对方??

谢谢大虾们的指教 !!!




...全文
99 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zephyr_cc 2007-09-11
  • 打赏
  • 举报
回复
垃圾回收器实现了一种火车算法,可以解决这种循环引用的问题.
参见<深入java虚拟机>9.9火车算法
bluecolossus 2007-09-11
  • 打赏
  • 举报
回复
顶一下

62,623

社区成员

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

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