Java 何时使用Image.flush()是安全的(或强制的)?

Java 何时使用Image.flush()是安全的(或强制的)?,java,image,Java,Image,我已经介绍了Java(以及Java本身)中的图像和缓冲图像的第一步,我对flush()方法有点困惑,我的问题很简单:什么时候在代码中刷新图像是安全的,甚至是强制性的 在做一些测试时,看起来Image.flush()什么都不做,但是BuffereImage.flush()会给出一些随机结果(有时一些内存似乎被释放了),但是我用来绘制它的组件停止在它的背景上绘制它 那么,我是否应该使用Image.flush()或buffereImage.flush(),或者这是我必须让JVM自己做的事情,或者可能在

我已经介绍了Java(以及Java本身)中的图像和缓冲图像的第一步,我对flush()方法有点困惑,我的问题很简单:什么时候在代码中刷新图像是安全的,甚至是强制性的

在做一些测试时,看起来Image.flush()什么都不做,但是BuffereImage.flush()会给出一些随机结果(有时一些内存似乎被释放了),但是我用来绘制它的组件停止在它的背景上绘制它

那么,我是否应该使用Image.flush()或buffereImage.flush(),或者这是我必须让JVM自己做的事情,或者可能在对象的finalize()方法中做的事情


我真的搞不懂…

除非你想释放内存,否则你永远不需要调用
flush()
。它基本上只是作为对对象的一个提示,告诉对象“嘿,现在就开始删除所有的备份内存缓冲区,而不是等待垃圾收集来处理你。”这可能是一个有用的性能优化,但不需要调用


根据Java文档,调用
flush()
会使图像处于一种可以根据需要重新构建自身的状态,但显然您遇到的问题并非如此。基本上,除非您确定不再需要图像,否则不要调用
flush()

因此在图像所有者的finalize()方法中调用它也没有任何意义,对吗?由于所有者被最终确定,图像也被刷新(除非它在别处被引用),我错了吗?感谢您的回答:)在终结器中调用它应该不会有什么坏处,而且在某些情况下,它实际上会有所帮助,因为根据您的特定垃圾收集器,如果您没有在
finalize()
中调用它,那么底层映像仍然可以继续存在另一个GC周期,因为它在标记和扫描的标记阶段仍然是所有的。只要确保在
finalize()
中调用它时,该对象是唯一使用它的对象。谢谢,这真的很有帮助。