javaFX内存发布,javaFX错误?

时间:2013-02-20 03:20:44

标签: performance memory-management javafx

我在javaFX示例Ensemble.jar中经常发现切换页面时,内存会越高越高,无法释放。这也发生在我的项目中。 这是javaFX的错误吗?现在我们的测试人员总是在抱怨这个问题。

有什么好方法可以解决这个问题吗?我们可以在javaFX中的“内存释放”中做些什么?

要解决这个问题,我们做了什么:

  1. 当我们销毁javaFX页面时,将全局变量设置为NULL。
  2. 减少.css文件中“重复大图像”的使用。
  3. 在Platform.runLater()中调用GC。 (这看起来有点傻)
  4. 但效果不是那么清楚,谁可以帮助我们?

1 个答案:

答案 0 :(得分:1)

这不是JavaFX中的错误。

我猜你的内存泄漏来自于在属性上使用侦听器。

JavaFX使用Properties作为观察者模式的实现。将ChangeListener添加到属性时,实际上是在属性对象中添加对侦听器的引用。如果您不调用RemoveListener method来删除此引用,则只要属性对象本身不是垃圾回收,您的侦听器就不会被垃圾回收。

我不知道你的代码是什么样的,但我可以做一些假设:

  • 每次切换页面时,都会实例化一个新控制器
  • 每个控制器实例化一个侦听器对象并将其添加到属性对象。
  • 切换页面时,前一个控制器是垃圾收集,而属性对象则不是。在属性对象中,有一个对Listener对象的引用,因此侦听器对象保留在内存中。 切换页面越多,实例化不会被垃圾回收的侦听器越多,内存泄漏就越大。

如果将Listeners添加到Properties,请尝试调用removeListener方法并查看它是否解决了问题。

此致

西里尔