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]
}
Кнопка
никогда не освобождается. Установка скина в null помогает как-то (в VisualVM большинство ссылок на кнопку исчезает), но не устраняет проблему. Я также безуспешно пытался обнулить все члены, используя отражение JavaFX.
Можно ли сделать ButtonB подходящей для GC и как это сделать?
Проблема сохраняется в JavaFX 2.0?