1. ホーム
  2. java

[解決済み] エラー java.lang.OutOfMemoryError: GCオーバーヘッドの制限を超えました

2022-03-22 09:43:13

質問

を実行すると、このようなエラーメッセージが表示されます。 JUnit をテストします。

java.lang.OutOfMemoryError: GC overhead limit exceeded

は知っている。 OutOfMemoryError はともかく、GCのオーバーヘッド制限ってどういうことなんだろう?どうすれば解決できますか?

どのように解決するのですか?

このメッセージは、何らかの理由でガベージコレクタが過剰な時間(デフォルトではプロセスの全CPU時間の98%)を費やし、各実行でごくわずかなメモリ(デフォルトではヒープの2%)しか回収できないことを意味します。

これは事実上、あなたのプログラムが何の進歩もしなくなり、常にガベージコレクションの実行だけに忙殺されることを意味します。

アプリケーションが何もせずにCPU時間を消費するのを防ぐために、JVMはこの Error そのため、問題を診断するチャンスがあります。

私が見た中で、このような現象が起こるのは、すでに非常にメモリ制約のある環境で、あるコードが大量の一時オブジェクトと大量の弱参照オブジェクトを生成していた場合です。

Java GCチューニングガイドをチェックしてください。様々なJavaバージョンで利用可能で、この特定の問題についてのセクションが含まれています。