java有自动内存回收机制,不close是会被回收的,但是代码不是良好的代码。

解决方案 »

  1.   

    Garbage collection will only free the resources within the JVM. 
    The resources assigned to the VM by the operating system will still be reserved. 
    I've seen several poorly written applications run out of resources due to poorly handled database connections, sockets and files. Rule of thumb: 
    if it has a close() method, invoke it when you are done with it. 
    And invoke it in a finally block so it will be called even if an exception occurs.大体上翻译一下:垃圾回收机制仅在Java虚拟机所控制的范围内释放资源。
    对于类似于数据库连接、socket以及文件操作等,
    如果有close方法,在你完成任务后执行它
    并且最好在finally块内做close,因为即使发生了例外,这些代码也能被调用。
      

  2.   

    虽然Java有自动内存回收机制,但是如果是数据库连接、网络连接、文件操作等,不close是不会被回收的,属于不正确的代码。
    也就是说,有close方法,必须得自己调用一下才行。对于使用完了的对象来讲,Java不推荐使用类似于C++的析构函数来释放内存(C++中new完后得delete,Java中new完,使用后,将其置成null比较好),因为GC会调节最适当的时间来释放内存,在程序中滥用delete会降低Java程序的性能(但应该不会引发额外的错误)。
      

  3.   

    一般这相当于一张安全网,如果你忘记了close也可以在GC的时候释放资源,但是太依赖这个就表明程序写的有问题了,该释放资源的地方没有释放!
      

  4.   

    I/O操作必须要手动close(),否则IO对象会任务还在使用,不会被GC回收。
    确保某个对象不被引用、使用,GC就会自动回收,释放内存
      

  5.   

    调用java中System.gc()方法确实是调用垃圾回收器的 但垃圾回收器是jvm的一个线程 既然它是一个线程你就应该明白 它什么时候执行不取决于这行语句的调用还取决于cpu是否执行这方法里的语句就算执行了cpu也可能会在执行的过程中执行其它的线程 
      

  6.   


    阿帕奇的开源框架里close都是在finalize中的,这不就已经默认了即使没有close,gc让然会清理?
      

  7.   

    在java中存在垃圾回收机制即对于一般的对象在使用完成后会自动卸载回收,但是对数据库连接、Socket、文件读写都要求使用close操作
      

  8.   

    阿帕奇的开源框架里close都是在finalize中的,这不就已经默认了即使没有close,gc让然会清理?finalize不是每次都必须执行的吗?
    这不就默认了,gc不会自动清理吗!
      

  9.   

    对象用完了就释放掉啊。。留着不关干嘛。。我做过一个小Demo。就是开多个Java.sql.Connection连接。然后给我抛了个异常。。
      

  10.   

    自从给我抛那异常之后。我就开始重视close()方法了。。
      

  11.   

    最好要close  不然会产生多余的垃圾 ,像网络连接、文件操作  数据库连接等,不close是不会被回收的   刚刚开始学习 要养成良好的编程习惯