私は〜30クラスのJava / Swingアプリケーションを書いています。私の問題は、プログラムを実行すると150 Mを超えるメモリがロードされることですが、それは正常ですか?アプリケーションには4つのスレッドがあるため、いくつかのXMLファイルを解析し、いくつかのアイコンファイルをロードし、いくつかのJfreechatチャートを描画します。そうでない場合、アプリケーションが使用するメモリの量を最小限に抑えるにはどうすればよいですか?一部の変数に影響を与えてnullヘルプを表示していますか?XMLファイルを一度ロードしてすべてのアプリケーションライフサイクルヘルプで使用するのですか、それとも必要なときに毎回ロードする必要がありますか?私を助ける他のヒントはありますか?
PS:私のプログラムで使用されるメモリに影響を与える可能性がある場合に備えて、8Gメモリコンピュータを使用して開発を進めています。
編集:vilmantasがアドバイスするように、アプリケーションでこのコードを実行することにより、Linuxのtopコマンドからこの値を取得するため、プログラムが150MBすべてを占有していないように見えました。
long free = Runtime.getRuntime().freeMemory();
long total = Runtime.getRuntime().totalMemory();
long max = Runtime.getRuntime().maxMemory();
long used = total - free;
彼が占める占有量はそれよりはるかに少ない(〜40MB)ことがわかったので、「-Xmx40M」引数を指定して実行することにし、Topコマンドでメモリ使用量を40%以上削減します。JVM (私が知っているように)以来、残りのメモリを占有している問題は、彼自身のプロセスを持っていますか?適切でない値を選択すると、「-Xmx30M」引数を指定して実行すると、メモリ例外が発生する可能性があるため、この操作を自動化する方法**?**:
Exception in thread "Thread-2" java.lang.OutOfMemoryError: Java heap space