Java 虚拟机 - Java 中的内存泄漏


本章我们将讨论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 并将连接对象视为不可访问之前,物理连接保持打开状态。现在,它将调用连接对象上的最终方法,但是,它可能不会被实现。因此,该对象在此周期中不会被垃圾回收。

接下来会发生同样的事情,直到远程服务器发现连接已经打开很长时间并强制终止它。因此,没有引用的对象会长时间保留在内存中,从而造成泄漏。