大家都知道,java有垃圾收集器,所以程序不以不必关心内存的回收,垃圾回收器是根据堆中的对象如没有引用了,就回收这这个对象,如果本个没用的对象还被引用着,那么这个对象所占的内就相当于泄漏了,我想的问的是,以下的代码会造成这种泄漏吗?
Public Class A {  // 类A
    B b;
    
    public A() {
        b = new B(this);
    }
}Public Class B { // 类B
    A a;    public B(A a) {
        this.a = a;
    }
}
//  然后另外一个函数里面Public fun() {
    A a = new A();    // 在这个fun()函数调用完毕,也就是退出这个函数域,
    在堆中创建的两个对象变成垃圾了,还是泄漏了? 望大家能帮小弟解答,不胜感激!!  
}  

解决方案 »

  1.   

    这个可以参考《Java编程思想》
      

  2.   

    Java中就不存在泄漏的说法,Java对象都是在堆内存中创建,泄漏只涉及到诸如数据库等资源,你打开数据库的连接或者游标等,目标对象不能得到你不再需要的信息而一直占有,其它的不予考虑
      

  3.   

        我看过《Java编程思想》,好像没注意到有这样的论述,可能是自已没看仔细,虽然这个问题很早以前大家就讨论过,但还是希望大家能谈谈自已的深刻理解,如果能有代码作例那就更好了,最近用swing写了界面程序,里面就有类似的代码,程序运行起来后,不动它到没什么,如频操作或不停的从数据库加载数据,界面响应就变得很慢,慢得难以让人接受了,点一下等好久才能动,白屏, 最终不得不从新启动程序    也不知道 是不是内存泄漏引起的,希望有经验的人给予指点,多谢了,一定加分!!
      

  4.   

    交叉引用 GC能回收内存, swing 问题的内存增加可能是其他原因导致的, 比如数据库资源没有释放 等.