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がトリガーされる前に物理接続は開いたままになり、接続オブジェクトを到達不能と見なします。 これで、接続オブジェクトの最終メソッドが呼び出されますが、実装されない場合があります。 したがって、このサイクルではオブジェクトはガベージコレクションされません。
リモートサーバーが接続が長時間開いていることを確認し、強制的に終了するまで、同じことが次に起こります。 したがって、参照のないオブジェクトはメモリに長時間保持され、リークが発生します。