小编sta*_*oid的帖子

JavaFX 8隐藏阶段时内存泄漏

我有一个JavaFX应用程序,当按下X按钮时,该应用程序最小化到托盘.我一直在通过VisualVM监视应用程序的内存趋势.

奇怪的是,当应用程序打开或最小化到任务栏时,内存总是被GC返回到使用的初始内存.然而,当它被最小化到托盘(stage.hide(),systemTray.show())时,内存得到GCed,但是呈上升趋势(泄漏).

在VisualVM中,Old Gen空间不断上升,一旦它在一段时间后达到最大值,应用程序将无法响应,并且CPU峰值达到80%.

我注意到如果我stage.show()通过双击托盘图标等在应用程序上,GC将清除所有内容恢复正常.但是,如果长时间离开,它将无法使GC成为老一代.

堆转储显示javafx.scene.Scene#7javafx.scene.Node[]#2具有最多保留空间.如果未隐藏舞台,则两者都不会出现.在参考文献中,它显示 this[] -> dirtyNodes().

this     - value: javafx.scene.Node[] #2
<- dirtyNodes     - class: javafx.scene.Scene, value: javafx.scene.Node[] #2
 <- value     - class: javafx.scene.Node$ReadOnlyObjectWrapperManualFire, value:  
 javafx.scene.Scene #7
Run Code Online (Sandbox Code Playgroud)

造成这种情况的原因是什么?如何解决这个问题?

java garbage-collection memory-leaks javafx javafx-8

36
推荐指数
1
解决办法
2148
查看次数