好的,所以我的代码中出现内存不足(堆空间)错误,并且我已经(通过分析)发现错误来自图像的创建。
我所拥有的是一个将图像创建为较小图像的类,然后将绘制该类。
问题是,如果我想将 1000 多个这些图像加载到 JPanel 中,我会在它敲出之前达到 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);
}
}
所以基本上,有没有更有效的方法将链接读入图像,或者如何删除不必要的内存?