Изображения Java занимают слишком много памяти - PullRequest
0 голосов
/ 06 октября 2010

У меня есть программа, которая использует много изображений. Он загружает много изображений из файла и сохраняет их, чтобы они загружались только один раз. Он также создает несколько BufferedImages, размером около 400x400, их будет не более 10.

Изображения из файла всего около 6 МБ. Каждый BufferedImage должен быть примерно 400x400x4 = 640KB.

Тем не менее, использование памяти составляет 500 МБ!

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

Кто-нибудь знает, что с этим делать? Или альтернатива BufferedImage, которая использует меньше памяти?

Ответы [ 2 ]

4 голосов
/ 06 октября 2010

Мне кажется, что ваше приложение (не библиотека) имеет утечку памяти. В первом случае вы должны попытаться определить утечку, используя стандартный профилировщик памяти Java.

EDIT

Теперь вы определили, что вокруг много BufferedImages, следующее, что вам нужно сделать, это выяснить, почему они все еще доступны. Возьмите дамп кучи, посмотрите на некоторые экземпляры и посмотрите, как они связаны с корнем кучи; см http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/heapdump.html

При выполнении подобных вещей полезно просматривать соответствующие части исходного кода Java с помощью вашей любимой Java IDE.

1 голос
/ 06 октября 2010

Является ли ваша программа веб-приложением? или вы разрабатываете JRE-подобное приложение? Как вы загружаете свои изображения?

В веб-приложении я бы использовал изображение CSS-Sprite для решения своей проблемы, поскольку оно обрезало несколько HTTP-запросов и улучшало как пропускную способность, так и использование памяти при загрузке.

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

...