第二个记录集赋给rs时,stmt.executeQuery(sql2);
已成为一个垃圾了,等待回收.

解决方案 »

  1.   

    java没有"内存泄露"这个说法,但有jvm崩溃的说法。:)
      

  2.   

    理论上不会,但在实际中本人在jdk1.3和oracle驱动class12.jar中出现rs记录集不够的情况。所有的都关闭后就好了。建议是,不要过于依赖垃圾回收,毕竟垃圾回收的线程运行的优先级是很低的,系统一繁忙后就来不及回收了。特别是做压力测试的时候,不进行rs.close是通不过测试的。
      

  3.   

    java是有 "内存泄漏" 的情况的,不过比较少
      

  4.   


    java中的内存泄漏和c/c++中的并不是一回事在c++中,内存泄漏意味者程序员忘记释放了分配的内存而在java中,内存的分配和释放完全由jvm来操控,因此不存在c++中遇到的问题。但是如果无用的对象太多,将会占用越来越多的内存,而此时gc还没有来得及回收它们,这就是java中的memory leak。
    你的程序中有内存泄漏。如 vgvg(成功靠自己) 所说。
      

  5.   

    我觉得还有一种情况,就是java程序中确实存在一些对象不能被GC回收例如:void function()
    {
       Object o1 = new Object();
       
       Object o2 = new Object();   o2 = o1;
       
    }o1所指的对象已经变成了垃圾,但是GC无法回收它,因为它的reference即o1仍然存在。如果缺少o1 = null这句话,就造成了内存泄漏。
      

  6.   

    不太明白,应该是O2原来所指的对象变成垃圾吧,即使加上O1=null,也无济于事吧.
      

  7.   

    iforem(做官不为民作主,不如回家卖红薯) 
    的说法错的一塌糊涂!请原来我的直言不讳!
    退出了方法体 引用自然就不存在了,当然可以被回收!!
    照你的理解不知道要增加多少 obj=null这样的多余代码!
      

  8.   


    确实理解错误,谢谢阿根指出
    第一个问题,笔误。o2 = o1后,如果没有其他的reference,object2将会被回收第二个问题,
           
       根根真是一针见血啊,方法结束后,o1和o2都消失了,所以object1 和object2都会被gc回收   但另外一种情况:
       function(Object c)
       {
           Object a = new Object();
           a.xx();
           a.yy();
           .......       c.ref = a;   }在程序中,多次调用这个方法,你说这个会不会引起内存泄漏?(假设c引用的对象仍然存在)这个需要a = null!
    第三,由第二可以归纳出,java中的内存泄漏就是程序中存在无用的reference