Java-正确删除映像以避免内存泄漏
正如标题所示,我发现内存泄漏,我怀疑其根源在于新图像的创建。内存泄漏的类型为java.util.Hashtable$Entry。谷歌搜索没有为我提供任何与图像创建相关的信息 该项目是一个插值器-用户输入多个点,程序将它们与曲线连接在一起。完成此操作后,将在图像上绘制曲线。这就要求每次生成插值时,在绘制图像之前,使用新的宽度和高度重新创建图像 我相信我已经缩小了这种方法的漏洞:Java-正确删除映像以避免内存泄漏,java,memory-leaks,bufferedimage,Java,Memory Leaks,Bufferedimage,正如标题所示,我发现内存泄漏,我怀疑其根源在于新图像的创建。内存泄漏的类型为java.util.Hashtable$Entry。谷歌搜索没有为我提供任何与图像创建相关的信息 该项目是一个插值器-用户输入多个点,程序将它们与曲线连接在一起。完成此操作后,将在图像上绘制曲线。这就要求每次生成插值时,在绘制图像之前,使用新的宽度和高度重新创建图像 我相信我已经缩小了这种方法的漏洞: public void reset(int width, int height){ if (width >
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是我正在写入的BuffereImage,graphics是Graphics2D实例。正如您可能猜到的,*i_width*和*i_height*分别表示图像的新宽度和新高度
我确定这个方法是主要的来源,因为只有在调用它时,泄漏才是明显的
正如您在上面所看到的,我尝试过刷新图像,在另一节中,我也处理了图形。不幸的是,这就是我所能做到的,它并没有解决内存泄漏问题
如何避免内存泄漏?我自己解决了这个问题。不幸的是,我无法确定问题的原因,但我可以确定如何解决问题 基本上我所做的是: 创建图形2d 重置图像 处理图形2d 创建图形2d 绘制插值曲线 处理图形2d
虽然仍有一些内存泄漏,但它们非常小,无关紧要,我不认为它们与此问题有任何关系。我会再次检查您是否正确处理了图形。HashMap在哪里使用?放在其中的对象类型是什么?HashMap不是我自己的-我假设它与BuffereImage有关,并且正在被映像使用。@GeoffGenz反复检查:resetnew_width,new_height;绘图插值;图形处理;有没有办法创建一个可以重现问题的示例?