内存泄漏
本章将讨论Java中的内存泄漏概念。以下代码在Java中创建内存泄漏-
void queryDB() {
try{
Connection conn = ConnectionFactory.getConnection();
PreparedStatement ps = conn.preparedStatement("query"); // executes a
SQL
ResultSet rs = ps.executeQuery();
while(rs.hasNext()) {
//process the record
}
} catch(SQLException sqlEx) {
//print stack trace
}
}
在上面的代码中,当方法退出时,我们尚未关闭连接对象。因此,物理连接在触发GC之前保持打开状态,并认为连接对象不可访问。现在,它将在连接对象上调用final方法,但是,可能无法实现。因此,该对象将不会在此循环中被垃圾回收。 下一迭代将发生同样的事情,直到远程服务器看到连接已打开很长时间并强行终止连接为止。因此,没有参考的对象会长时间保留在内存中,这会导致泄漏。