使用javax.Swing
时我有一个内存不足的例外,这就是我所做的。
我加载了16个jpgs(每个70 * 70像素)并且有16个Jbuttons
。我在一个循环中非常快速地将ImageIcon
的{{1}}设置为不同的jpgs,基本上和我的CPU可以处理的速度一样快。内存使用量从根本上增加。问题是,我从未重新加载图像。只有16个图像,所有的作业都通过参考传递了吗?我运行Eclipse Memory Analyzer,这就是我得到的:
由“& lt system class loader& gt”加载的“java.awt.image.FilteredImageSource”的一个实例占用703,066,368(43.58%)个字节。该实例由sun.awt.image.ToolkitImage @ 0x7859cef60引用,由“& lt system class loader& gt”加载。内存累积在由“& lt system class loader& gt”加载的“java.util.Hashtable $ Entry []”的一个实例中。
关键字
java.awt.image.FilteredImageSource
java.util.Hashtable中$入口[]
我可以怀疑Java的swing实现中存在内存泄漏吗?有什么想法吗?
基本上代码如下:
JButtons
请忽略这里明显的反模式,因为我抽取了新线程中发生的很多事情。