隐藏阶段时的 JavaFX 8 内存泄漏
我有一个JavaFX应用程序,当按下X按钮时,它会最小化到托盘。我一直在通过VisualVM监视应用程序以了解内存趋势。
奇怪的是,当应用程序打开或最小化到任务栏时,内存总是被GCed回使用的初始内存。但是,当它最小化到托盘(,)时,内存会GCed,但呈上升趋势(泄漏)。stage.hide()
systemTray.show()
在 VisualVM 中,旧一代空间不断上升,一旦它在一段时间后达到最大值,应用程序将无响应,CPU 峰值达到 80%。
我注意到,如果我通过双击托盘图标等在应用程序上stage.show(),
GC会将所有内容清除恢复正常。但是,如果长时间放置,它根本无法GC旧一代。
堆转储显示 并具有最多保留的空间。如果未隐藏舞台,则两者都不会出现。在“引用”下,它显示 。javafx.scene.Scene#7
javafx.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
这是什么原因造成的,我该如何解决这个问题?