LWUITを使用してMIDletを作成していますが、画像が大量のメモリを消費しているようです。私が使用するすべての画像はPNGであり、JARファイル内にパックされています。標準のImage.createImage(URL)メソッドを使用してそれらをロードします。アプリケーションにはいくつかのフォームがあり、それぞれにボタンのラベルがいくつかありますが、アクティブなフォームのみがメモリに保持されていることはかなり確信しています(信頼性が低いことはわかっていますが、Runtime.freeMemory()は確認しているようです)これ)。
アプリケーションは240x320の解像度で正常に動作しましたが、480x640に移動し、UIに適切に大きい画像を使用すると、メモリ不足エラーが表示されるようになりました。アプリケーションが行うことは、とりわけ、リモートイメージをダウンロードすることです。この時点まで、アプリケーションは正常に動作しているようです。いくつかのPNGをダウンロードしてメインメニューに戻ると、メモリ不足エラーが発生します。当然、メインメニューが使用するメモリの量を調べたところ、かなり衝撃的でした。画像付きの2つのラベルと4つのボタンです。各ボタンには、style.setIcon、setPressedIcon、およびsetRolloverIconに使用される3つの画像があります。画像のサイズは15〜25 KBですが、ボタンごとに使用される3つの画像のうち2つ(合計8つの画像)を削除すると、Runtime.freeMemory()はメモリ使用量が1MB減少しました。
私の見方では、メモリリークがたくさんあるか(私はそうは思わないが、メモリリークが簡単に追跡できることは正確にはわかっていない)、画像処理でひどく間違ったことをしている、または本当に問題はなく、スケールダウンする必要があります。
誰かが提供する洞察を持っているなら、私はそれを大いに感謝します。