Java Virtual Machine - Vazamento de memória em Java

Discutiremos sobre o conceito de vazamento de memória em Java neste capítulo.

O código a seguir cria um vazamento de memória em 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
   }
}

No código acima, quando o método termina, não fechamos o objeto de conexão. Assim, a conexão física permanece aberta antes que o GC seja acionado e veja o objeto de conexão como inacessível. Agora, ele chamará o método final no objeto de conexão, no entanto, ele pode não ser implementado. Portanto, o objeto não será coletado como lixo neste ciclo.

O mesmo acontecerá no próximo até que o servidor remoto veja que a conexão está aberta há muito tempo e a encerre à força. Assim, um objeto sem referência permanece na memória por muito tempo, o que cria um vazamento.