私はSwings Javaアプリケーションを持っているとします。 ユーザーがアプリケーションを起動すると、最小ヒープは64MB、最大ヒープは2GB、 に設定されます。ログイン画面 が表示されます。 私のWindows 7から、私は、Javaアプリケーションがメモリリソースモニター(実際には、64MB以上のJVMはタスクのためにいくつかのメモリを必要とするので)からが割り当てられていることがわかります。実行時にOS用のJavaメモリを解放します。
ユーザーが非常に重い仕事をした後、アプリケーションは2Gを使用します。 ユーザーがアプリケーションをログアウトすると、ログイン画面が再び表示されます(アプリケーションはまだ閉じられていません)。現時点では、アプリケーション が64MBを使用している実際のメモリ(これは完璧なメモリ管理アプリケーションであると仮定します)、 ですが、このアプリケーションはまだ2GのRAMを使用していますが、OSのリソースモニタで見ることができます。
大容量のメモリを使用する必要がない場合は、アプリケーションがOSにメモリを解放します。私は実行時にJavaアプリケーションでそれを行うことはできますか?私のアプリケーションは、64MBのRAMを使用する必要があるとき
は私が意味する、 は、OSは64メガバイトのみ、 それは2GBのRAMが必要なときにそれを与え、それはOSがその後、64MBのRAMが必要になり、その後OSはそれを2ギガバイト、 を与えますそれは再び64MBを与えます、 私はそれを浪費したくありません2000MB - 64MB = 1936MB。
できますか?あなたがオブジェクトを処分し、ガーベジコレクタを提案できる
おかげで、
この関連する質問をチェックしてください:http://stackoverflow.com/q/1481178/562906 – sinelaw