У меня есть программа, которая использует много изображений. Он загружает много изображений из файла и сохраняет их, поэтому они загружаются только один раз. Он также создает несколько BufferedImages, около 400x400, их будет не более 10.Java-изображения занимают слишком много памяти
Изображения из файла всего около 6 МБ. Каждый BufferedImage должен быть приблизительно 400x400x4 = 640 КБ.
Тем не менее, использование памяти составляет 500 МБ!
Некоторые из них будут предназначены для остальной части программы, но я уверен, что изображения занимают большую часть пространства.
Кто-нибудь знает, что с этим делать? Или альтернатива BufferedImage, которая использует меньше памяти?
Звучит подозрительно, я бы обвинил ваш код, прежде чем обвинять библиотеки, извините. Позаботьтесь, чтобы вставить некоторые из них? Что происходит, когда вы вынуждаете сборщика мусора работать? Должны быть некоторые профилировщики памяти для java. http://www.google.com/#hl=en&expIds=17259,18168,26792,26885,27006&sugexp=ldymls&xhr=t&q=memory+profiler+java&cp=17&pf=p&sclient=psy&safe=off&aq=0&aqi=g4g-o1&aql=&oq = memory + profiler + j & gs_rfai = & pbx = 1 & fp = 7c8f32f65b860aba –
Согласитесь с Hamish, это может быть ошибка в коде, который загружает и кэширует изображения. Возможно, это загрузка и кеширование изображений более одного раза. –
Да, изначально я предполагал, что это была утечка памяти. Но как только оно начинается, самое большее, 10 из 400x400 BufferedImages сделаны. И это 500MB в начале, оно, кажется, не растет оттуда, его просто огромная сумма в начале. @Hamish Мы пытались заставить сборщика мусора, но это не слишком много. Когда я получаю шанс, я просмотрю инструменты профилирования памяти. Что касается вставки кода, это было бы довольно непрактичным, поскольку на самом деле это скорее спагетти-иш. Мы работаем над приключенческой игрой для группового проекта для университета, а код - полный беспорядок. – DanielGibbs