Чтение изображения с использованием Javax занимает много памяти - PullRequest
1 голос
/ 13 мая 2011

Я открываю кучу файлов, используя 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.

1 Ответ

3 голосов
/ 13 мая 2011

Вы не можете рассчитывать, что текущее использование памяти является объемом памяти, который необходим, сборка мусора не выполняется постоянно, особенно если вы далеки от максимального использования памяти. Попробуйте загрузить больше изображений, вы можете обнаружить, что это не проблема.

Странно, что загрузка 1Mb Pic занимает намного больше, чем 1Mb.

Что ж, я ожидал бы, что сохраненный на диске формат будет сжат / меньше, чем BufferedImage в памяти. Так что я не думаю, что это странно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...