Performance javaFX内存释放,javaFX bug?

Performance javaFX内存释放,javaFX bug?,performance,memory-management,javafx,Performance,Memory Management,Javafx,我发现在JavaFXSample Ensemble.jar中频繁切换页面时,内存会越来越高,无法释放。这也发生在我的项目中。 这是javaFX的一个bug吗?现在我们的测试人员总是抱怨这个问题 有什么好办法解决这个问题吗?在javaFX的“内存释放”中我们可以做什么 为了解决这个问题,我们做了以下工作: 当我们销毁javaFX页面时,将全局变量设置为NULL 减少在.css文件中使用“重复的大图像” 在Platform.runLater()中调用GC。(这似乎有点傻) 但是效果不是很清楚,谁能帮

我发现在JavaFXSample Ensemble.jar中频繁切换页面时,内存会越来越高,无法释放。这也发生在我的项目中。 这是javaFX的一个bug吗?现在我们的测试人员总是抱怨这个问题

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

为了解决这个问题,我们做了以下工作:

  • 当我们销毁javaFX页面时,将全局变量设置为NULL
  • 减少在.css文件中使用“重复的大图像”
  • 在Platform.runLater()中调用GC。(这似乎有点傻)

  • 但是效果不是很清楚,谁能帮我们

    这不是JavaFX中的错误 我猜您的内存泄漏是由于在属性上使用侦听器造成的。

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

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

    • 每次切换页面时,都会实例化一个新的控制器
    • 每个控制器实例化一个侦听器对象并将其添加到属性对象
    • 切换页面时,前一个控制器被垃圾收集,而属性对象则不被垃圾收集。在property对象中,存在对Listener对象的引用,因此Listener对象保留在内存中。 切换页面越多,实例化不被垃圾收集的侦听器越多,内存泄漏越大
    如果将侦听器添加到属性,请尝试调用RemovelListener方法,看看它是否解决了问题

    问候,


    Cyril

    使用探查器跟踪任何内存泄漏。我推荐——它在过去曾多次帮助过我。除此之外,谷歌还为“Java内存泄漏”提供了其他资源。谢谢。Jprofile很有用。嗨,我面临着和@Keon所说的相同的问题。我已经尝试了所有不同类型的解决方案,比如删除静态数据、变量,我还增加了Vm大小。也检查了Week reference,但我无法获得正确的执行方法,也减少了不需要的后台线程。我也研究了你的解决方案,但在我的2-3页中,几乎没有几个点击监听器可以提高内存使用率?