使用ImageIO.read(文件)读取图像; 导致java.lang.OutOfMemoryError:Java堆空间

我正在使用ImageIO API来编写PNG文件。 此代码在循环中调用并导致OutOfMemory错误。 无论如何可以修复以下代码以避免OutOfMemory错误? 或者是增加JVM堆大小的唯一选择?

File file = new File(resultMap.get("outputFile").toString()); //ImageIO to convert jpg to png BufferedImage img = ImageIO.read(file); file = new File(resultMap.get("outputFile").toString() + ".png"); ImageIO.write(img, "png", file); 

Java堆大小为1024M。

我有一个类似的问题,我必须读取36张图像,裁剪它们并将它们保存到一个新文件(一次一个)。 我发现每次迭代后我必须将图像设置为null,以允许Java进行垃圾收集。 即:

 BufferedImage img; for (int i=0; i<36; i++) { img = ImageIo.ImageIO.read(anImageFile); /* Do what's needed with the image (cropping, resizing etc.) */ ImageIO.write(img, "jpg", outputFile); img.flush(); img = null; } 

我知道它现在是一个老post,但我希望它可以帮助将来的某个人。

为什么不尝试在BufferedImage上调用flush( )。 它释放了一些资源。