さて、コードでメモリ不足(ヒープスペース)エラーが発生し、(プロファイリングを使用して)エラーがイメージの作成に起因していることがわかりました。
私が持っているのは、画像を小さな画像に作成するクラスです。その後、そのクラスがペイントされます。
問題は、これらの画像を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);
}
}
それで、基本的に、画像へのリンクを読み取るためのより効率的な方法はありますか、または何らかの方法で不要なメモリを削除しますか?