javaFX内存发布,javaFX错误?

Keo*_*ang 7 performance memory-management javafx

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

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

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

  1. 当我们销毁javaFX页面时,将全局变量设置为NULL.
  2. 减少.css文件中"重复大图像"的使用.
  3. 在Platform.runLater()中调用GC.(这看起来有点傻)

但效果不是那么明显,谁可以帮助我们呢?

小智 3

这不是 JavaFX 中的错误。

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

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

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

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

如果在Properties中添加Listeners,尝试调用removeListener方法看看能否解决问题。

问候,

西里尔