Machine virtuelle Java - Fuite de mémoire dans Java

Nous discuterons du concept de fuite de mémoire en Java dans ce chapitre.

Le code suivant crée une fuite de mémoire en 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
   }
}

Dans le code ci-dessus, lorsque la méthode se termine, nous n'avons pas fermé l'objet de connexion. Ainsi, la connexion physique reste ouverte avant que le GC ne soit déclenché et considère l'objet de connexion comme inaccessible. Maintenant, il appellera la méthode finale sur l'objet de connexion, mais il se peut qu'elle ne soit pas implémentée. Par conséquent, l'objet ne sera pas ramassé dans ce cycle.

La même chose se produira dans la suite jusqu'à ce que le serveur distant voit que la connexion est ouverte depuis longtemps et la met fin de force. Ainsi, un objet sans référence reste longtemps en mémoire ce qui crée une fuite.