2011-01-07 9 views
12

私は、一時的にいくつかのプロセスで一定量のメモリ/ヒープが必要なアプリケーションを持っています。オプションとしてJVMに最大ヒープサイズの妥当な値が与えられた場合、JVMは少しヒープで開始し、必要に応じてOSからより多くのメモリを要求します。JVMは不要になったときにOSに空きメモリを戻しますか?

私のアプリケーションでもうメモリが必要ない場合は、追加のメモリがJVMによってOSに返されます(他のプロセスなど)。現在、私のアプリケーションは、もはや必要がなくなっても、そのメモリを永久に保持しているようです。

+0

「JVM」という_no_があります。興味のある実装を指定する必要があります。 – paxdiablo

+0

29宿題はやるべきことがある。真剣に。 –

答えて

22

JVMはメモリをOSに戻しますが、すぐに再度必要となる可能性があり、OSからメモリを取得するのは比較的高価です。

あなたはJVMがもっと熱心にOSにメモリを戻したい場合は、あなたがtuning parameters of the Oracle JVMを使用することができ、特に-XX:MaxHeapFreeRatio-XX:MinHeapFreeRatio

3

必ずしもそうではありません。使用するJVMによって異なります。私はIBMのJVMを使って1つのケースを知っています。また、必要がない場合でも、メモリを解放しないプログラムに問題がありました。いくつかの情報はIBM's siteにあります。

0

それは確かにバージョンで、選択したガベージコレクタに依存します。私は、Java 1.8.0_73がデフォルトでOSに少量をリリースすることがあることを発見しました。これはJVMのパラメータを調整することなくそれを見ることができた最初のバージョンですが、以前のバージョンにも当てはまるかもしれませんが、正確なバージョンはわかりません。

パラメータが調整されていない限り、デフォルトでは、ヒープの60〜70%が使用されていない限り、何もリリースされない可能性があります。

ここではパフォーマンスの問題があるかもしれません.Javaは遅いという評判がありましたので、デフォルトではJVMはOSからの割り当てを最小限に抑え、ガベージコレクションを大量のメモリを保持することでできるだけ効率的にしようとします。それほど頻繁にはしません。

OSに空きメモリがほとんど残っていないと、メモリにぎこちなくなるかもしれないのだろうか?

関連する問題