簡體   English   中英

使用ImageIO.read(file);讀取圖像 導致java.lang.OutOfMemoryError:Java堆空間

[英]Reading images using ImageIO.read(file); causes java.lang.OutOfMemoryError: Java heap space

我正在使用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;
}

我知道這是一個舊帖子,但我希望它將來能對某人有所幫助。

為什么不嘗試在BufferedImage上調用flush( )。 它釋放了一些持有的資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM