JVMがどのように機能するかについて誤解していると思います。これはGCの問題でも「タスク」の問題でもありません。
タスクにメモリリークがあるか、より多くのメモリを保持するように設計されています。
-Xmx1024mは、JVMが割り当てることができる最大メモリを設定します。これは、1024メガバイトの物理メモリしかなく、仮想メモリがない場合と同じです。
タスクの定義で質問を更新すると便利です。これらの5つの別々のJVMですか?または、単一のJVMでわずか5ユニットの作業。
アップデート
プログラムが常にすべての1gヒープを使用するつもりはありません。私の意図は、管理できる場合は512mヒープを使用し、必要な場合にのみより多くのメモリを使用するようにJVMに指示することです。メモリが不要になったら、512m以下のメモリにフォールバックします。
-Xmx1024mを設定したからといって、JVMがそのすべてのメモリを使用するわけではありません。これは単なる上限です。使用するメモリの最小量を設定するまでXmsを設定します。プログラムは最終的に、使用されているメモリの実行量を決定します。-Xmxで設定された制限に達すると、OutOfMemoryErrorがスローされます
を呼び出すことにより、JVMにガベージコレクタを実行するように提案できますSystem.gc()
。私が提案したことに注意してください。GCを強制的に実行することはできません。GCを実行することさえ拒否するプラットフォームで実行している可能性があります。また、アプリケーションにどのGCアルゴリズムを選択しているかを調べる必要があります。ここでガベージコレクターのチューニングを確認します。
メモリ使用量をこのように細かく制御する必要がある場合は、JVM以外のものを選択する必要があります。