Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-正确删除映像以避免内存泄漏_Java_Memory Leaks_Bufferedimage - Fatal编程技术网

Java-正确删除映像以避免内存泄漏

Java-正确删除映像以避免内存泄漏,java,memory-leaks,bufferedimage,Java,Memory Leaks,Bufferedimage,正如标题所示,我发现内存泄漏,我怀疑其根源在于新图像的创建。内存泄漏的类型为java.util.Hashtable$Entry。谷歌搜索没有为我提供任何与图像创建相关的信息 该项目是一个插值器-用户输入多个点,程序将它们与曲线连接在一起。完成此操作后,将在图像上绘制曲线。这就要求每次生成插值时,在绘制图像之前,使用新的宽度和高度重新创建图像 我相信我已经缩小了这种方法的漏洞: public void reset(int width, int height){ if (width >

正如标题所示,我发现内存泄漏,我怀疑其根源在于新图像的创建。内存泄漏的类型为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是我正在写入的BuffereImage,graphics是Graphics2D实例。正如您可能猜到的,*i_width*和*i_height*分别表示图像的新宽度和新高度

我确定这个方法是主要的来源,因为只有在调用它时,泄漏才是明显的

正如您在上面所看到的,我尝试过刷新图像,在另一节中,我也处理了图形。不幸的是,这就是我所能做到的,它并没有解决内存泄漏问题


如何避免内存泄漏?

我自己解决了这个问题。不幸的是,我无法确定问题的原因,但我可以确定如何解决问题

基本上我所做的是:

创建图形2d 重置图像 处理图形2d 创建图形2d 绘制插值曲线 处理图形2d
虽然仍有一些内存泄漏,但它们非常小,无关紧要,我不认为它们与此问题有任何关系。

我会再次检查您是否正确处理了图形。HashMap在哪里使用?放在其中的对象类型是什么?HashMap不是我自己的-我假设它与BuffereImage有关,并且正在被映像使用。@GeoffGenz反复检查:resetnew_width,new_height;绘图插值;图形处理;有没有办法创建一个可以重现问题的示例?