我目前正试图找出应用程序内存泄漏的位置。所以,我写了一个小测试程序,因为我的内存泄漏似乎与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()会保留那么多内存,即使在返回后也不保存图像?
答案 0 :(得分:0)
它没有“保留那么多记忆”。它不能。这里似乎发生的一切都是在GC开始之前它需要大约800个图像加载。
为什么要加载23k图像?这似乎很奇怪。你要在哪里展示它们?你有超大屏幕吗?