上一节:

  JVM 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之前保持打开状态,并认为连接对象不可访问。现在,它将在连接对象上调用final方法,但是,可能无法实现。因此,该对象将不会在此循环中被垃圾回收。 下一迭代将发生同样的事情,直到远程服务器看到连接已打开很长时间并强行终止连接为止。因此,没有参考的对象会长时间保留在内存中,这会导致泄漏。
上一节: