スレッドは実際にはメモリの問題ではありません(これらの18の約半分はデバッグモードIIRCにあるという理由だけです)。他のものはかなり明白な名前を持っています(私の推測):AWT-シャットダウン(すべてのウィンドウが破棄されるかどうかを確認してからJVMを終了する)、AWT-Windows(OSからイベントを取得する)、Java2Dディスポーザー(画像データをクリーンアップする)。
実行しているプログラムはわかりませんが、Netbeansプラットフォームに基づいている場合は、おそらく追加のメモリ要件が追加されますが、180MBではありません。ほとんどのメモリは使用されていない(予約されているだけ)か、実際のデータがメモリを消費していると思います。
比較のために:
- ラベルとボタンが付いた単純なJFrameは、必要なのは最大2MB(-Xmx2MBで実行されますが、visualvmは8MBが予約されていることを示しています(64ビットWindowsでは最小ですか?)、<2MBを使用)。
- 私が70MBのライブラリ(jar)で開発する複雑なGUIプログラムは、〜35MB(私の推測ではアイコン/画像だけで〜5-10MB)を開始し、すべての機能を使用した後です(つまり、非GUIのものを含むほとんどすべてのライブラリコードがロードされます) 〜100MBですが、これには一部のデータが含まれます。
壊す:
- java.awt.image.BufferedImage#156 7.056.378
- java.awt.image.BufferedImage#415 6.639.738
- sun.misc.Launcher $ AppClassLoader#1 3.386.545
- クラスcom.ces.core.gui.help.WelcomeTab627.256(静止画像データはこちら)
- class com.ces.util.resources.Translator 408.146(基本的にすべてのテキストがUIに表示されます)
- sun.awt.AppContext#1 389.760
- java.awt.image.BufferedImage#161 326.120
約半分はキャッシュされた画像のように見えます(大きな背景画像:))同じデータを参照するint [] / Object [] /HashMap.Entry []を省略しました)
サンプルアプリの内訳を確認したい場合->VisualVM->モニター->ヒープダンプ->保持されたサイズでx個の最大オブジェクトを検索します。