我正在编写一个利用JavaFX的应用程序,每20-30秒在屏幕上和屏幕上滚动大量图像内容。它意味着能够运行多个小时,吸引全新的内容,并在几分钟内丢弃旧内容。我的系统有512Mb的图形内存,几分钟后,所有内存都被JavaFX占用,无论我如何处理JavaFX场景,都不会释放它。我一直非常小心地放弃节点,最多一次在内存中有50-60个图像节点。我真的需要能够做到支持这些图像的图形内存的硬性发布,但一直未能弄清楚如何实现,因为JavaFX中的Image接口看起来非常高。 JavaFX将继续运行良好,但由于资源有限,其他图形重度应用程序将无法加载。有没有办法强制JavaFX发布视频内存?
我正在寻找类似的flush()方法上java.awt.image.Image: http://docs.oracle.com/javase/7/docs/api/java/awt/Image.html#flush()
我在Linux上运行的Java 7u13。
编辑:
我设法制定出一个潜在的解决方法(见下文),而且也进入了一个JavaFX的JIRA票要求上述功能:
RT-28661 Add explicit access to a native resource cleanup function on nodes.
只需要清楚,“半”没有什么神奇之处,你只需要确保留下足够的空间用于其他任何需要在系统上运行的空间。 – theJuddson 2013-02-22 16:22:03
经过几天的调整和监控我的设置之后,这种解决方法似乎只取得了中等成功。如果我打开缓存,我的视频内存仍然会失去控制,即使关闭它,它最终会超出我的堆空间设置。看起来好像GC实际上不足以触发本地资源清理。张贴JIRA的请求以请求明确的清理访问。 RT-28661 – theJuddson 2013-02-26 20:54:24