Изображения используют слишком много оперативной памяти при обработке - PullRequest
1 голос
/ 29 сентября 2019

Я пытаюсь загрузить несколько тысяч маленьких изображений в обработку и отобразить их в виде карты большего размера.Общий размер файлов изображений вместе составляет 130 МБ, однако, когда я запускаю программу, она использует всю мою оперативную память, и я даже получаю OutOfMemoryError, поскольку использование ОЗУ превышает 2 ГБ.

Что вызывает более чем 10-кратное использование памяти по сравнениюк размеру файла, и есть ли способ, как я могу смягчить это?

РЕДАКТИРОВАТЬ:

Пример кода

ArrayList<PImage> images = new ArrayList<PImage>();
void setup() {
    for (int i = 0; i < 2000 /*num of images*/; i++) {
        images.add(loadImage(Integer.toString(i) + ".jpg");
    }
}

//in reality, never gets here
void draw() {

    for (PImage i: images) {
        image(i, /*precalculated x and y*/ random(500), random(500));
    }
}

1 Ответ

3 голосов
/ 29 сентября 2019

Степень сжатия JPEG составляет 10: 1, что объясняет это: изображения сжимаются на диске, но при загрузке в вашу программу и распаковке вы получаете размер в 10 раз больше.

Чтобы улучшить код,не загружайте изображения сразу: обрабатывайте их по несколько раз.

...