Java Sanal Makinesi - Java'da Bellek Sızıntısı

Bu bölümde Java'daki bellek sızıntısı kavramını tartışacağız.

Aşağıdaki kod Java'da bir bellek sızıntısı yaratır -

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
   }
}

Yukarıdaki kodda, yöntem çıktığı zaman bağlantı nesnesini kapatmadık. Böylece, fiziksel bağlantı, GC tetiklenmeden önce açık kalır ve bağlantı nesnesini erişilemez olarak görür. Şimdi, bağlantı nesnesindeki son yöntemi çağıracak, ancak uygulanamayabilir. Dolayısıyla, nesne bu döngüde çöp olarak toplanmayacaktır.

Uzak sunucu bağlantının uzun süredir açık olduğunu görene ve zorla sonlandırana kadar aynı şey bir sonraki seferde de gerçekleşecektir. Böylelikle referansı olmayan bir nesne uzun süre hafızada kalır ve bu da sızıntıya neden olur.