正如标题所示,我得到了内存泄漏,我怀疑它们的起源在于新图像的创建。内存泄漏的类型为 java.util.Hashtable $ Entry 。谷歌搜索没有向我提供与图像创建有关的任何内容。
项目是插补器 - 用户输入多个点,程序将它们与曲线连接在一起。完成此操作后,曲线将在图像上绘制。这就需要每次生成插值时,在绘制图像之前,使用新的宽度和高度重新创建图像。
我相信我已经缩小了对这种方法的泄漏:
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 *分别代表图像的新宽度和高度。
我确定这个方法是主要的来源,因为泄漏只有在被调用时才会被注意到。
正如您在上面所看到的,我已经尝试刷新图像,而在另一部分我也处理了图形。不幸的是,就我而言,这并没有解决内存泄漏问题。
我应该如何避免此内存泄漏?
答案 0 :(得分:0)
我自己解决了这个问题。不幸的是,我无法确定问题的为什么,但我可以确定解决方案的如何。
基本上我做的是以下内容:
虽然仍有一些内存泄漏,但它们非常小(无关紧要),我不相信它们与此问题有任何关系。