Непонятки с Heap Dump: откуда такие массивы и такое потребление?

Рейтинг: 1Ответов: 0Опубликовано: 30.11.2014

Доброго времени суток.

Вопрос в следующем. Посоветовали мне посмотреть мою программку под VisualVM, с целью посмотреть, куда и на что уходит память. Посмотрел, шок номер раз: jar весом в 3 Мб, где большая часть файлов - это картинки-ресурсы, тихо и печально ест под 200 метров памяти. Сделал Heap Dump, посмотрел объекты и занимаемую ими память. Тут шок номер два: откуда-то берется много объектов типа byte[] и кушают большую часть памяти, 87%. Я понимаю, что эти массивы могут создаваться в различных объектах как поля, ибо принадлежность к классам показана (например, были такие классы, как InputStream или HeapByteBuffer).

Вопрос в следующем: это нормально? Я не очень давно пишу на Java, перешёл с Си, поэтому мне немного рвет шаблон и потребление памяти, и вот такие внезапные массивы. И если не нормально, можно ли это как-то исправить и снизить потребление памяти? Также, если можно, подскажите какой-нибудь букварь, который можно повкуривать для большего понимания.

Заранее спасибо.

Обновление

Программа, по сути, занимается тем, что перемещает и создает новые объекты интерфейса в виде изображений. Плюс немного посчитать. Шахматы без ИИ. Ресурсы, типа потоков, освобождаются все, да и мало их.
Вопрос про под 200 метров снимаю, бо это таки количество памяти, взятой у ОС (спасибо htop). А вот макс. размер heap'а уменьшать не пробовал.

Ответы

Ответов пока нет.