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

📅  最后修改于: 2020-11-13 05:38:37             🧑  作者: Mango


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

下一步将发生同样的事情,直到远程服务器看到连接已经打开很长时间并强行终止连接为止。因此,没有参考的对象会长时间保留在内存中,这会导致泄漏。