我们在使用java编写程序的时候,很多时候用到java提供的类创建对象后都需要使用close()方法来释放对象。但是java不是有自己的垃圾回收机制吗,我们即使不用close()方法释放对象,jvm自己也会去回收这部分内存资源的,为什么还要自己手动去调用close方法,那岂不是和c/c++一样了,每次new一个对象还要调用delete来释放这个对象。

解决方案 »

  1.   

    close方法仅仅是为了释放该对象所持有的对象引用或通过该close方法释放资源。
    如:
    connection.close();
    connection=null;
      

  2.   

    那我可以这样理解不,就是 即使不用close()也没关系,反正最后jvm都会去回收垃圾的, 但是使用close()后就可以及时释放资源,不必非等到最后资源占用完了才开始痛苦的回收过程,而且从良好的编程习惯来说,创建了对象,就应该考虑到用完后就要释放内存资源,要养成一个良好的编程习惯。
      

  3.   

    java的内存回收机制,也是要等到资源达到一定限度才开始回收,也是有生命周期的。
      用close()可以及时回收资源,更加高效
      

  4.   

    close释放的是资源,而不是持有资源的对象
    java可以自动回收的是对象,表现为回收对象分配的内存
    但不能回收资源,如果不执行close,可能会造成资源耗尽
      

  5.   

    这个解释我觉得很合理,jvm回收的是由java创建的对象占用的内存资源,但是有close()方法的java内置对象(比如:套接字对象,数据库连接对象)这些实际都占用了计算机的其他资源,所以实际释放的是计算机其他资源,而非java创建的对象占用的内存资源。所以close()方法是必须的。(比如使用了数据库的连接对象,如果不调用close()方法将会导致数据库的连接资源耗尽)