Java虚拟机(JVM)内存泄漏

Java虚拟机(JVM)内存泄漏

在本章中将讨论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方法,但是,它可能无法实现。因此,在该循环中不会对对象进行垃圾收集。

同样的事情将在下一次发生,直到远程服务器发现连接已经打开了很长时间并强制终止它。因此,没有引用的对象长时间保留在存储器中,这会产生泄漏。