Как использовать Java BufferedImage и Robot идеальным способом для управления памятью? - PullRequest
0 голосов
/ 11 декабря 2011

Я новичок в объектно-ориентированном программировании.Я создал класс со статическим методом, который фиксирует прямоугольники разных размеров на моем экране с различными интервалами.Захваты сохраняются в статическом BufferedImage с использованием статического экземпляра робота:

myStaticBufferedImage = myStaticRobot.createScreenCapture(arbitrarySizeRectangle);

Некоторые операции выполняются с данными (в том числе иногда записываются изображения в файл bmp).При следующем захвате не нужны никакие данные изображения из предыдущего захвата.

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

private static BufferedImage myStaticBufferedImage = new BufferedImage(RESOLUTION_X, RESOLUTION_Y, APPROPRIATE_IMAGE_TYPE);

Распределяет ли это многократно используемый фрагмент памяти без каких-либо утечек или неэффективности, поскольку я многократно снимаю изображения?Или метод createScreenCapture заполняет все больше и больше памяти каждый раз, когда я его использую, и просто назначает новый указатель на myStaticBufferedImage?

Я запускаю это приложение на OSX Lion вместе с программным обеспечением, интенсивно использующим процессор.Какова лучшая практика для управления памятью?Спасибо!

1 Ответ

0 голосов
/ 11 декабря 2011

Вы не должны инициализировать myStaticBufferedImage с наибольшим разрешением. createScreenCapture() создаст свою собственную BufferedImage в памяти, а затем к ней будет обращаться myStaticBufferedImage. Ни в коем случае createScreenCapture() не будет использовать буфер из myStaticBufferedImage.

Тем не менее, если вы будете создавать только несколько BufferedImage с, это, вероятно, не будет иметь никакого значения рядом с программным обеспечением, интенсивно использующим процессор (память?).

...