ImageIO.read()内存消耗

时间:2014-04-30 16:17:13

标签: java memory memory-leaks javax.imageio

我目前正试图找出应用程序内存泄漏的位置。所以,我写了一个小测试程序,因为我的内存泄漏似乎与ImageIO.read()方法有关。我的测试应用程序包含一个带有JButton的简单JFrame,它启动以下Action:

    public void actionPerformed(ActionEvent e)
    {
        File folder = new File("C:\\Pictures");
        ArrayList<File> files = new ArrayList<File>(Arrays.asList(folder.listFiles()));
        try
        {
            for (File file : files)
                ImageIO.read(file);
        }
        catch (Exception a)
        {
            a.printStackTrace();
        }
    }

虽然我没有保存ImageIO.read的返回值,即图像,但我的应用程序有一个巨大的内存分配(~800 MB)。出于测试原因,文件夹C:\ Pictures包含~23k图片,总大小为25GB。

为什么ImageIO.read()会保留那么多内存,即使在返回后也不保存图像?

1 个答案:

答案 0 :(得分:0)

它没有“保留那么多记忆”。它不能。这里似乎发生的一切都是在GC开始之前它需要大约800个图像加载。

为什么要加载23k图像?这似乎很奇怪。你要在哪里展示它们?你有超大屏幕吗?