最近参与了一个JavaFX的项目,负责其中的性能测试等工作,作为一个“用户”在测试的过程中,发现其中有很严重的稳定性问题。主要表现为:操作一段时间后,VisualVM监测占用内存持续攀升,最终界面卡死,出现内存溢出异常。
由于项目中使用了JMS,一开始猜测是它的原因导致,经过排查发现与JMS并无关系。中文资料太少,没办法只能借助谷歌,在javafx官方找到了相关回答:
引起JavaFX内存溢出的原因通常为:监听没有关闭。
一般创建监听、给组件添加监听事件之后,经常会忘记移除监听(removeLinistener),而不移除监听的后果就是Java虚拟机不自动回收这部分垃圾。
后来在看了API之后,发现在Interface ObservableValue<T>的addListener方法中有相关描述:
The ObservableValue sto