Java 如何释放ImageIcon分配的内存?我有一个带“的无限循环”;“新图像图标”;我需要在显示后释放每个图像。

Java 如何释放ImageIcon分配的内存?我有一个带“的无限循环”;“新图像图标”;我需要在显示后释放每个图像。,java,swing,memory,memory-management,imageicon,Java,Swing,Memory,Memory Management,Imageicon,如何释放ImageIcon分配的内存?我有一个带有“new ImageIcon…”的无限循环,在屏幕上显示每个图像后,我需要释放每个图像分配的内存。图像之间的显示间隔为200毫秒。是否有人有简单有效的解决方案来避免日益增长的内存消耗?非常感谢 在图像的fnal绘制之后,简单地说images.get(i)移除保留的图像:images.set(i,null)。通过这种方式,垃圾收集器可以将其删除。如果您不重用映像,并且希望丢弃系统缓存的数据,请查看 刷新此图像对象正在使用的所有可重构资源。 这包括缓

如何释放ImageIcon分配的内存?我有一个带有“new ImageIcon…”的无限循环,在屏幕上显示每个图像后,我需要释放每个图像分配的内存。图像之间的显示间隔为200毫秒。是否有人有简单有效的解决方案来避免日益增长的内存消耗?非常感谢

在图像的fnal绘制之后,简单地说
images.get(i)
移除保留的图像:
images.set(i,null)
。通过这种方式,垃圾收集器可以将其删除。

如果您不重用映像,并且希望丢弃系统缓存的数据,请查看

刷新此图像对象正在使用的所有可重构资源。 这包括缓存以渲染到图像的任何像素数据 屏幕以及用于存储的任何系统资源 图像的数据或像素(如果可以重新创建)。图像是 重置为与首次创建时类似的状态,以便 再次渲染时,必须重新创建或获取图像数据 再次从它的源头


你能分享你的代码片段吗?我无限次调用这个函数:public void setImagem(String Imagem){if(Imagem!=null){Imagem=new ImageIcon(Imagem).getImage();}否则{Imagem=null;}repaint();}“有没有人有一个简单而有效的解决方案来避免日益增长的内存消耗?”忽略它。JVM会在需要时进行GC。我会尝试每个答案。谢谢大家,我真的很感谢你们的快速支持。我尝试过使用它,但由于无知而未能成功。当我键入“Images.get(I)”;Images.set(i,null)“解释器NetBeans需要更多的东西,键入“set what,或get what?”并且,正如我所说的,我不知道该对解释器说什么。请将我的代码与适当的函数关联起来。你能帮我吗?代码是:public void set picture(图片字符串){if(Image!=null){image=new-ImageIcon(Picture).getImage();Else{}image=null;}repaint();}对不起,我在这里是无知的;写完之后,您扩展了您的问题。我假设您将创建的图像保存在类字段和绘制(组件)中方法绘制了下一个图像。使用图像时,唯一的内存泄漏要么是保留了引用,要么是
createGraphics
而没有
dispose
。很抱歉,您可能太小地添加了
add(new JLabel(imageicon))
,这会导致问题。我正在尝试创建一个桌面应用程序(java swing)我发现使用“外观”,静态图像,降级或其他方式的表单非常烦人。所以我创建了一些动画,类似于动画gif,但在我的例子中是一个由20个图像组成的序列1024x640 jpg(每个表单)我正在创建动画墙纸之类的表单。这就是问题所在-如何释放上面的图像以分配新的图像序列而不使用越来越多的内存?我尝试了你的建议,但没有成功。内存继续增加每个“新图像图标”。我想(我不知道,无意冒犯)是“刷新”仅处理挂起的操作,但不处理“ImageIcon”分配的可用内存(可能我错了)。您有另一张“魔卡”吗显示?非常感谢!
flush
基本上允许以前由
ImageIcon
分配的资源,这些资源将来可能会用于垃圾分配。非常感谢程序员!我将在每次使用“new ImageIcon”时进行刷新。祝您过得愉快!