Java Force ガベージ コレクション

Sheeraz Gul 2023年6月20日
Java Force ガベージ コレクション

このチュートリアルでは、Java でガベージ コレクションを強制する方法を示します。

Java Force ガベージ コレクション

ヒープ使用率が 100% に近づくたびに、OutOfMemoryError のリスクが最大に増加します。 その時点で、JVM はガベージ コレクションを強制し、メモリを解放する必要があります。

ほとんどの場合、JVM にガベージ コレクションを強制することはできませんが、必要に応じていくつかのメソッドを使用してガベージ コレクションを実行できます。

このチュートリアルでは、Java でのガベージ コレクションのさまざまな方法を示します。

Java でのガベージ コレクションのために System.gc() を呼び出す

System.GC() メソッドは、ガベージ コレクションを実行するために Java コードのどこでも呼び出すことができます。 ガベージ コレクションに優先順位が付けられ、ガベージ コレクションが呼び出されるたびに数秒で実行されます。

このメソッドの構文は次のとおりです。

System.gc();

コード内の任意の場所でガベージ コレクションを実行するには、System.gc() を呼び出すだけです。 これは、ガベージ コレクションを強制する場合と同様に機能します。

Java でガベージ コレクションを実行するには、Runtime.getRuntime().gc() を呼び出します。

Runtime.getRuntime().gc()System.gc() を呼び出すため、同様の方法でガベージ コレクションを優先します。 Runtime.getRuntime() は、Java コードで端末コマンドを実行します。

メソッド Runtime.getRuntime().gc()System.gc は同じです。 このメソッドの構文は次のとおりです。

Runtime.getRuntime().gc();

構文のようにこのメソッドを呼び出すだけで、JVM はガベージ コレクションを実行してメモリ領域を解放します。

jcmd を使用して Java でガベージ コレクションを強制する

jcmd Java 診断コマンドは、ガベージ コレクション ルーチンをトリガーする JDK の組み込みユーティリティです。 このガベージ コレクションは、JVM が一時停止を安全にスケジュールできる場合にトリガーされます。

JVM が一時停止を実行できない場合、このコマンドは jmap と同じエラーをスローします。

このコマンドの構文は次のとおりです。

jcmd 1234 GC.run

番号はプロセス ID で、GC.run はガベージ コレクションを呼び出すために使用されます。

Java Mission Control または JConsole を使用して Java でガベージ コレクションを強制する

Java Mission Control と JConsole は、jcmd コマンドと対話する使いやすいインターフェースを提供します。 Java Mission Control または JConsole は、JVM にガベージ コレクションを強制できます。

JConsole ツールは、メモリ管理ページにガベージ コレクションを実行という名前のボタンを提供します。 クリックすると、JVM にガベージ コレクションを実行させることができます。

Java Mission Control は、開発者がボタンをクリックするだけで実行できる GC.run を含む任意の jcmd 機能を選択するのに役立ちます。

どちらのツールも、バックグラウンドで jcmd ガベージ コレクション コマンドを呼び出します。

jmap を使用して Java でガベージ コレクションを強制する

JMAP (Java メモリ マップ) は、ヒープのヒストグラムを出力する方法を提供します。 また、jmap コマンドが呼び出されるたびに、ガベージ コレクション ルーチンが強制されますが、これはガベージ コレクションを強制する正しい方法とは見なされません。

JVM にワークロードがあり、ガベージ コレクションを実行できない場合、jmap コマンドはエラーをスローします。

次のコマンドを参照してください。

jmap -histo:live 1234

live はヒストグラム オプションで、その前の数字はプロセス ID です。

著者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook