JavaFX(1.2.x 和 1.3.x)似乎至少不允许对节点和场景进行垃圾收集。Node 对象在从 Scene 中移除后不会被释放(没有其他明确的引用)。
这里是例子:
var buttonB:Button =
Button {
text: "i'm just hanging here"
}
var buttonC:Button =
Button {
text: "hit me to leak memory"
action: function() {
buttonB.managed = false;
delete buttonB from mainBox.content;
buttonB.skin = null;
buttonB = null;
java.lang.System.gc();
}
}
def mainBox:HBox =
HBox {
hpos: HPos.CENTER
nodeVPos: VPos.CENTER
layoutInfo: LayoutInfo {
width: 800 height: 600
}
content: [buttonC, buttonB]
}
buttonB 永远不会被释放。将 skin 设置为 null 会有所帮助(在 VisualVM 中,对按钮的大多数引用都会消失),但不能解决问题。我还尝试使用 JavaFX 反射使所有成员无效,但没有运气。
是否可以使 buttonB 有资格获得 GC 以及如何做到这一点?
JavaFX 2.0 中的问题是否仍然存在?