使用していないときにJavaヒープを減らす方法はありますか? 質問する

使用していないときにJavaヒープを減らす方法はありますか? 質問する

私は現在、Java アプリケーションに取り組んでおり、メモリ使用量の最適化に取り組んでいます。私が知る限り、適切なガベージ コレクションのガイドラインに従っています。しかし、ヒープは必要ではないにもかかわらず、最大サイズのままになっているようです。

私のプログラムは、コンピュータが使用されていないときに、1 時間に 1 回、リソースを大量に消費するタスクを実行します。このタスクは大量のメモリを使用しますが、タスクが完了するとすぐにメモリがすべて解放されます。NetBeans プロファイラーは、メモリ使用量が次のようになっていることを明らかにします。

Java プログラムのメモリ使用量

使用していないときは、ヒープ領域をすべて OS に返したいです。プログラムが少なくともあと 1 時間は何もしないのに、ヒープ領域をすべて独占する理由はありません。

これは可能ですか? ありがとうございます。

ベストアンサー1

いろいろ試してみるといいかもしれません-XX:MaxHeapFreeRatio。これは、GC によってヒープが縮小される前に空いているヒープの最大パーセンテージ (デフォルトは 70) です。これをもう少し低く (40 または 50?) 設定して使用すると、System.gc()目的の動作が得られるかもしれません。

ただし、これを強制的に実行する方法はありません。JVM に実行するように促すことはできますが、必要なときにメモリを自由に削除することはできません。また、上記の方法でヒープを縮小できるかもしれませんが、そのメモリが必ずしも OS に直接返されるわけではありません (ただし、最近の JVM 実装ではそうなります)。

おすすめ記事