簡體   English   中英

Java-BufferedImage(ImageIO.Read)內存不足堆空間

[英]Java - BufferedImage (ImageIO.Read) OutOfMemory Heap Space

好的,所以我的代碼中出現了內存不足(堆空間)錯誤,並且我發現(帶有概要分析)該錯誤是由於創建圖像而引起的。

我所擁有的是一類,可以將圖像創建為較小的圖像,然后對該類進行繪制。

問題是,如果我想將這些圖像中的1000多個加載到JPanels中,那么在將其提取出來之前,我會達到750個左右,我真的不想擴展Java的內存。

這是代碼:

class Foo extends JPanel{
private BufferedImage image;
private Image scaled;   
public Foo(String link){
    try{
        setPreferredSize(new Dimension(50,50));
        image = ImageIO.read(new URL(link)); //Cause for memory leak
        scaled= image.getScaledInstance(100, 140, BufferedImage.SCALE_FAST);
        image.flush();
                    //tried image = null; but did not help memory
    }
    catch(Exception e){}
}

public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(scaled, 5, 5, null);
}
}

因此,基本上,有沒有更有效的方法將鏈接讀取到圖像中,或者有一些如何刪除不必要的內存?

我不確定這是否足夠,但是您可以使用以下方法消除使用scaled的情況:

drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) 

知道問題...

您可能不需要每次都重新讀取完整圖像。

我已經實現了類似的功能。 我要做的是,以所需的大小存儲每個圖像的快照+在文件名中包含此快照的時間戳,以便知道快照是否仍是最新的。

對於最初的快照制作,這並不能解決您的問題,但對於以后的使用來說卻很好。

暫無
暫無

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

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