我有一个javafx桌面应用程序,经过一段时间的使用后,在其中一个场景中的dirtynodes []中累积了很多对象。 Eclipse的工具MAT认为这是一个可疑的情况和可能的泄漏。它使用170 MB的内存,在我的情况下是30%。该场景中的节点有定期更新。我可以做些什么吗?这些污点是否被清理干净?我正在使用java 8 u 51。
答案 0 :(得分:2)
脏节点是场景中已失效的节点。它们每帧处理一次,因此如果JavaFX应用程序线程(UI线程)繁忙,则不会发生脏节点的同步。
我们在listview的屏幕上遇到了一个问题,其中listview的每个单元格都包含许多矩形和文本。整个列表视图包含几百个节点 列表视图中的单元格不应该被重用,而是每次重新绘制列表视图时创建。当listview有很多行并且用户持有滚动条并将其移动一分钟时,脏节点的同步就不会发生,并且因为有数百个tousends脏节点而导致内存异常。
所以我的建议是检查在向其添加节点时是否阻止JavaFX应用程序线程。
好的做法是在后台线程中创建节点并在UI线程中添加场景。