Java Virtual Machine-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 메서드를 호출하지만 구현되지 않을 수 있습니다. 따라서 개체는이주기에서 가비지 수집되지 않습니다.

원격 서버가 연결이 오랫동안 열려 있음을 확인하고 강제로 종료 할 때까지 동일한 일이 다음에 발생합니다. 따라서 참조가없는 객체는 오랫동안 메모리에 남아 누수가 발생합니다.