当相同的BufferedImage对象加载多个图像时,内存泄漏

时间:2013-01-16 15:39:31

标签: java performance memory bufferedimage javax.imageio

我正在尝试制作一个从文件夹中获取jpeg图像(4张图像)并将它们合并为一个大图像的工具。

for (int i = desde; i < hasta + 1; i++) {
            for (int j = 0; j < 4; j++) {
                foto = ImageIO.read(new File("C:/picYou/Pic you_diciembre 06 2012/Pic you_take" + i + "/" + (j + 1) + ".jpg"));
                g.drawImage(foto, 300, 300 + j * (altoFoto + 20), null);
                foto.flush();
                foto = null;
            }
            File output = new File("C:/picYou/" + i + ".jpg");
            ImageIO.write(img, "jpg", output);
            g.finalize();
            g.dispose();
        }

g是一个graphics2d对象,foto是一个BufferedImage。

问题是即使我在加载另一个图像之前刷新图像并使其为空,图像使用的内存也不会被释放。如您所见,每个图像都以“foto”加载,有没有办法让它更有效率?谢谢!

1 个答案:

答案 0 :(得分:2)

垃圾收集器在需要时释放内存,而不是按需使用。

如果你想检查你是否有内存泄漏我建议你使用VisualVM并查看在Full GC之后只使用了多少内存