文档章节

关于JavaFX中内存泄露问题

bigYuan
 bigYuan
发布于 2013/10/31 13:13
字数 495
阅读 1270
收藏 6

最近参与了一个JavaFX的项目,负责其中的性能测试等工作,作为一个“用户”在测试的过程中,发现其中有很严重的稳定性问题。主要表现为:操作一段时间后,VisualVM监测占用内存持续攀升,最终界面卡死,出现内存溢出异常。


由于项目中使用了JMS,一开始猜测是它的原因导致,经过排查发现与JMS并无关系。中文资料太少,没办法只能借助谷歌,在javafx官方找到了相关回答:


引起JavaFX内存溢出的原因通常为:监听没有关闭。

一般创建监听、给组件添加监听事件之后,经常会忘记移除监听(removeLinistener),而不移除监听的后果就是Java虚拟机不自动回收这部分垃圾。


后来在看了API之后,发现在Interface ObservableValue<T>的addListener方法中有相关描述:

The ObservableValue stores a strong reference to the listener which will prevent the listener from being garbage collected and may result in a memory leak. It is recommended to either unregister a listener by calling removeListener after use or to use an instance of WeakChangeListener avoid this situation.它是一个强引用的Listener,有可能会引起内存泄露,推荐的解决办法是使用完之后调用removeListener,或者使用WeakChangeListener这个弱引用的监听。


找到了问题的原因之后,配合MAT调查了一下,果然在有些控件的监听上存在内存泄露,使垃圾越堆越多,最终导致内存不足而卡死。(但是由于时间问题,相关开发人员还没有着手修正,是否存在其他问题还暂时不清楚)


资料还表示,组件绑定也会引起内存泄露,也许也是原因之一。


参考资料:

官方API:http://docs.oracle.com/javafx/2/api/javafx/beans/value/ObservableValue.html

官方讨论区:https://forums.oracle.com/thread/2502830

内存分析工具MAT:http://www.eclipse.org/mat/

本文转载自:http://blog.csdn.net/luanjiyang/article/details/9631545

bigYuan
粉丝 17
博文 135
码字总数 43172
作品 0
大连
程序员
私信 提问
加载中

评论(1)

m
marlondu
javafx的webview也存在内存泄漏,使用webEngine每访问一次网页,内存占用就飙升一次
JavaFX 开源计划细节泄露

在OpenJDK的最近一封邮件中,来自Oracle client Java的首席架构师Richard Bair透露了他们对其富互联网应用程序平台JavaFX的一些开源计划,暗示JFX开源需要更加透明,并计划将所有的封闭代码都...

红薯
2011/11/04
1K
5
开始学习JavaFX (译)

原文地址:http://download.oracle.com/javafx/2.0/get_started/jfxpub-get_started.htm 如果你想使用 JavaFX 快速创建拥有富客户体验的应用程序,那么这个文章正是为你准备的。你将学习如何...

Jeky
2011/10/10
6.9K
6
JavaFX 架构与框架 (译)

原文地址:http://download.oracle.com/javafx/2.0/architecture/jfxpub-architecture.htm JavaFX 2.0平台是基于Java技术的富客户端平台。它使应用程序开发者更加容易的开发和部署跨平台的富...

Jeky
2011/10/09
5.1K
26
JavaFX 11 发布,与 JDK 拆分后的首个正式大版

JavaFX 11 发布了,JavaFX 是一个强大的图形和多媒体处理工具包集合,它允许开发者来设计、创建、测试、调试和部署富客户端程序,并且和 Java 一样跨平台。由于 JavaFX 库被写成了 Java API...

h4cd
2018/09/20
8.8K
30
JavaFX 2.2 正式发布,下一版本为 8.0

甲骨文今天正式发布了JavaFX 2.2。 该版本中包含了针对Windows、Linux和Mac OS X平台的SDK,不过JavaFX运行时仍然只支持Windows和Linux平台。 该版本的主要新特性包括: 支持H.264和AAC编码的...

Jeky
2012/08/16
2.7K
20

没有更多内容

加载失败,请刷新页面

加载更多

三分钟,让你弄清楚Python中函数的括号使用

一直以来对python中函数括号的使用,有点分不清楚,到底什么时候用括号,什么时候不用括号,造成了很大困惑。 执行结果: 根据结果来分析: 1、 x = aaa aaa是一个类名,后面没加括号,打印结...

每天学Python
20分钟前
3
0
腾讯开源进入爆发期,Plato助推十亿级节点图计算进入分钟级时代

腾讯开源再次迎来重磅项目,14日,腾讯正式宣布开源高性能图计算框架Plato,这是在短短一周之内,开源的第五个重大项目。 相对于目前全球范围内其它的图计算框架,Plato可满足十亿级节点的超...

云计算头条
56分钟前
3
0
佣金计算

佣金计算 一、佣金计算 佣金计算分为:三级分销、股东分红、区域分销。 1、三级分销:展示的是三级分销的具体信息。可对其进行搜索和高级搜索。 三级分销的具体展示情况是对订单号、订单金额...

Geek-Chic
59分钟前
4
0
测试

If you are planning an outdoor event, you must be looking for a suitable tent. If yes, there are so many different options available these days. Renting or buying a tent will se......

阿锋zxf
今天
11
0
Java面试通关要点汇总集

基础篇 基本功 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区别 说说反射的用途及实现 说说自定义注解的场景及实现 HT...

java后端开发
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部