JavaFX (1.2.x および 1.3.x) では、少なくともノードとシーンのガベージ コレクションが許可されていないようです。ノード オブジェクトは、シーンから削除された後は解放されません (他に明示的な参照はありません)。
次に例を示します。
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 は決して解放されません。スキンを null に設定すると、(VisualVM ではほとんどのボタンへの参照が消えます) 何らかの形で役立ちますが、問題は解決しません。また、JavaFX リフレクションを使用してすべてのメンバーを無効にしようとしましたが、うまくいきませんでした。
buttonB を GC の対象にすることは可能ですか?その方法は?
JavaFX 2.0 でも問題は解決しませんか?