什么时候使用Image.flush()安全(或强制)?

osr*_*osr 13 java image

我一直在用Java(和Java本身)给我的第一步图像和缓冲图像,我对flush()方法有点困惑,我的问题很简单:何时安全甚至强制冲洗代码中的图像?

做一些测试,它看起来像Image.flush()没有做任何事情,但BufferedImage.flush()给出一些随机的结果(有时一些内存似乎被释放),但我用来绘制它的组件停止在它上面绘制它背景.

所以我应该使用Image.flush()或BufferedImage.flush(),还是我必须让JVM自己做,或者可以在对象的finalize()方法中做?

我真的想不出来......

flu*_*ffy 11

你永远不需要打电话flush(),除非你想释放记忆.它基本上只是作为对象的暗示说,"嘿,现在继续删除所有后备内存缓冲区,而不是等待垃圾收集来照顾你." 它可以是一个有用的性能优化,但它永远不需要调用.

根据Java文档,调用flush()应该使图像处于可以根据需要重建自身的状态,但显然你遇到了不是这种情况的问题.基本上,flush()除非您确定不再需要图像,否则不要打电话.

  • 我今天了解到,在某些情况下,您需要调用flush():“卸载由 Toolkit 和 Component 类创建的图像对象,这些对象从文件、URL 加载或由 ImageProducer 生成,并释放所有本地资源。” 至少在我的应用程序中,垃圾收集器无法释放所有图像资源(可能是本机资源),并且我总是最终得到: Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space after Continuousloads使用 this.toolkit.createImage(byte[]) 可以得到相当大的图像。这是PNG图像。 (2认同)