Java-virtual-machine-memory-leak

提供:Dev Guides
移動先:案内検索

Java仮想マシン-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がトリガーされる前に物理接続は開いたままになり、接続オブジェクトを到達不能と見なします。 これで、接続オブジェクトの最終メソッドが呼び出されますが、実装されない場合があります。 したがって、このサイクルではオブジェクトはガベージコレクションされません。

リモートサーバーが接続が長時間開いていることを確認し、強制的に終了するまで、同じことが次に起こります。 したがって、参照のないオブジェクトはメモリに長時間保持され、リークが発生します。