0

多くの画像を使用するプログラムがあります。ファイルから大量の画像を読み込み、一度だけ読み込まれるように保存します。また、約 400x400 の複数の BufferedImages も作成しますが、これらは 10 個以下です。

ファイルからの画像の合計は約 6 MB です。各 BufferedImage は、約 400x400x4=640KB である必要があります。

それでも、メモリ使用量は 500MB です。

この一部はプログラムの残りの部分に使用されますが、画像がほとんどのスペースを占めていると確信しています。

誰もこれについて何をすべきか知っていますか? または、より少ないメモリを使用する BufferedImage の代替ですか?

4

2 に答える 2

4

あなたのアプリケーション(ライブラリではない)にメモリリークがあるように思えます。最初に、標準の Java メモリ プロファイラを使用してリークを特定する必要があります。

編集

これで、たくさんのBufferedImagesぶらぶらしていることがわかったので、次に行う必要があるのは、それらがまだ到達可能である理由を理解することです。ヒープ ダンプを取り、いくつかのインスタンスを見て、それらがどのようにヒープ ルートに接続されているかを確認します。http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/heapdump.htmlを参照してください。

この種の作業を行う場合、お気に入りの Java IDE を使用して Java ソース コードの関連部分を調べると便利です。

于 2010-10-06T01:39:43.187 に答える
1

あなたのプログラムは Web アプリケーションですか? または、JRE のようなアプリケーションを開発していますか? 画像をどのようにロードしますか?

Web ベースのアプリケーションでは、CSS-Sprite イメージを使用して問題を解決します。これは、いくつかの HTTP 要求を遮断し、帯域幅の使用とロード時のメモリ使用の両方を改善するためです。

JRE アプリケーションでは、イメージ スプライトを同じように使用する方法が必要です。イメージ スプライトの 400x400 のオフセットをロードして、BufferedImage オブジェクトの使用を減らし、パフォーマンスを向上させます。

于 2010-10-06T01:31:10.050 に答える