JFileChooser を使用して多数のファイルを開いていBufferedImage
ますimage = ImageIO.read(path);
。image が静的フィールドとして宣言されている場所。
これで、それぞれ 1Mb のファイルが 30 個になり、read() を 60 回実行した後、メモリ使用量 (OS プログラム マネージャーで確認) が約 70Mb 増加しました。
私の画像変数は静的であるため、画像コンテンツがどこかに保存されているという問題ではありません。私の質問は、なぜそんなに多くのメモリを失っているのですか?
大量の写真をメモリにロードする必要があるアプリを書いていますが、ネギはありますか? 使用されていないデータをクリーンアップするのはガベージ コレクターのタスクですか?
このデータを読み取るコードは次のとおりです。
public class FileListElement {
private static final long serialVersionUID = -274112974687308718L;
private static final int IMAGE_WIDTH = 1280;
// private BufferedImage thumb;
private static BufferedImage image;
private String name;
public FileListElement(File f) throws IllegalImageException {
// BufferedImage image = null;
try {
image = ImageIO.read(f);
// if (image.getWidth() != 1280 || image.getHeight() != 720) {
// throw new IllegalImageException();
// }
} catch (IOException e) {
e.printStackTrace();
}
image.flush();
//
// thumb = scale(image, 128, 72);
// image = null;
name = "aa";
}
}
どうしたの?
多分私は間違っているのですか?RAMにロードされた大量の画像または圧縮画像から生のピクセルが必要です。そのため、画像の任意のピクセルにすばやくアクセスできました。
1Mb の pic をロードするのに 1Mb 以上かかるのは奇妙です。