Как следует из названия, у меня случаются утечки памяти, и я подозреваю, что их происхождение связано с созданием новых образов. Утечка памяти имеет тип java.util.Hashtable$Entry. Поиски в Google не дали мне ничего, что касалось бы создания изображений.
Проект представляет собой интерполятор - пользователь вводит несколько точек, а программа соединяет их кривыми. Когда это сделано, кривые рисуются на изображении. Это требует, чтобы каждый раз, когда генерируется интерполяция, изображение воссоздавалось с новой шириной и высотой, прежде чем оно будет нарисовано.
Я считаю, что я сузил утечку до этого метода:
public void reset(int width, int height){
if (width >= 15){
i_width = width;
} else {
i_width = 15;
}
if (height >= 15){
i_height = height;
} else {
i_height = 15;
}
try {
image.flush();
} catch (Exception e) {}
image = new BufferedImage(i_width, i_height, BufferedImage.TYPE_INT_ARGB);
graphics = image.createGraphics();
Color color = new Color(1f, 0f, 1f, 0f);
graphics.setColor(color);
for(int y = 0; y < i_height; y++){
for(int x = 0; x < i_width; x++){
graphics.fillRect((x), (y), 1, 1);
}
}
}
Выше image — это BufferedImage, в который я пишу, а graphics — экземпляр Graphics2D. Как вы, наверное, догадались, *i_width* и *i_height* представляют новую ширину и высоту изображения соответственно.
Я определил, что этот метод является основным источником, поскольку утечки заметны только при его вызове.
Как вы можете видеть выше, я попытался очистить изображение, а в другом разделе также удалил графику. К сожалению, это то, что мне удалось, и это не решило проблему утечки памяти.
Как мне избежать этой утечки памяти?
reset(new_width, new_height); drawInterpolation(); graphics.dispose();
- person MemoNick   schedule 10.02.2014