Я открываю кучу файлов, используя JFileChooser, и для каждого изображения я создаю BufferedImage
, используя image = ImageIO.read(path);
. Где изображение объявлено как статическое поле.
Теперь у меня есть 30 файлов по 1 МБ каждый, и после выполнения 60-кратного чтения () мое использование памяти (проверено в диспетчере программ ОС) увеличивается примерно на 70 МБ.
Поскольку моя переменная изображения является статической, не проблема, что содержимое изображения где-то хранится. Итак, мои вопросы: почему я теряю так много памяти?
Я пишу приложение, которое должно загружать тонны картинок в память, есть ли где-нибудь лук-порей? Это сборщик мусора для очистки неиспользуемых данных?
Вот мой код для чтения этих данных:
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";
}
}
Что с ним не так?
Может, я делаю что-то не так? Мне нужны необработанные пиксели из тонны изображений или сжатых изображений, загруженных в оперативную память. Чтобы я мог быстро получить доступ к любому пикселю изображения.
Странно, что загрузка 1Mb Pic занимает намного больше, чем 1Mb.