Sta*_*tas 2 garbage-collection jvm memory-leaks javafx javafx-2
JavaFX(1.2.x和1.3.x)似乎不允许至少为节点和场景进行垃圾收集.从Scene中删除后,Node对象不会被释放(没有其他显式引用).
这是一个例子:
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]
}
Run Code Online (Sandbox Code Playgroud)
buttonB永远不会被释放.将skin设置为null有助于某种方式(在VisualVM中,大多数对该按钮的引用都会消失),但不能解决问题.我也尝试使用JavaFX反射使所有成员无效而没有运气.
是否可以使buttonB符合GC的要求以及如何操作?
问题是否仍然存在于JavaFX 2.0中?
我发现(通过visualVM检查)JavaFX 1.3将SoftReferences保存到已删除的节点的缓冲图像(可能代表节点的渲染版本).对我来说,这是一种内存泄漏,因为根据可用内存量清除了软引用.这不是内存泄漏(由于这个原因,OutOfMemoryException永远不会发生),但对我而言,这是导致垃圾收集非常低效的原因.
您可以使用它XX:SoftRefLRUPolicyMSPerMB=<N>
来减少保留SoftReferences的时间,但这可能会(但不太可能)性能损失.它设置保留对象的每个可用MB的毫秒数.默认值为1000毫秒.
归档时间: |
|
查看次数: |
1796 次 |
最近记录: |