在本章中将讨论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
方法,但是,它可能无法实现。因此,在该循环中不会对对象进行垃圾收集。
同样的事情将在下一次发生,直到远程服务器发现连接已经打开了很长时间并强制终止它。因此,没有引用的对象长时间保留在存储器中,这会产生泄漏。
上一篇:
Java虚拟机(JVM)调整GC
下一篇:无