对Closable对象正确使用close()和= null

Mr *_*ace 4 java

说,我正在使用连接到数据库命名con(或套接字或其他任何东西Closable).之后发生了什么close()?是con变得相等null还是还有东西?和之间有什么区别con.close()con = null

Lui*_*oza 5

当您调用时close,该对象应释放它在幕后使用的所有资源.如果是一个实例java.sql.Connection,它将是两件事之一:

  • 释放与数据库的任何物理连接,从而释放资源.当您手动打开数据库连接时会发生这种情况DriverManager.getConnection(...).
  • 进入睡眠状态并等待再次调用.这种情况发生在Connection通过处理DataSource这是由一个数据库连接池处理.

设置对象con = null只是为null变量赋值,引用仍然有效,直到垃圾收集器决定删除它.仍然,设置Connectionnull 调用close方法,因此您可以有内存泄漏.

作为最佳实践,你应该总是调用close上的实例方法Closeable或使用try-with-resources(可用自Java 7中),以确保资源(S)为(被)一直处于关闭状态.