Eclipse rap 富客户端开发总结(12) -Rap 优化之组件的销毁
来源:互联网 发布:古藤动漫怎么样知乎 编辑:程序博客网 时间:2024/05/16 18:54
注: Eclipse rap 富客户端开发总结-系列文章是从本人 Iteye博客中移植过来.后续会直接在此更新 http://jlins.iteye.com/
一、概述
经过几个月的rap 项目实战,总结了一些小经验,在这里总结一下,希望对大家有所帮助。
二、销毁的处理
相信学习rap 的同学都知道,swt 中提供了许多的组件,像label、 button、 text等,这些组件在实际中的运用是非常广泛的,当然具体的用法在这里就不介绍了,主要是在我们实际应用过程中应该注意的地方,那就是用过后要记得销毁组件。
从我们项目中来说,在我们的项目中应用了大量的label 组件,并且会有频繁的增加和删除的功能。此时就会有大量的无用的label产生,如果不销毁这些label ,那将会占用一些空间资源信息。起初在做项目的时候没有考虑到这个问题,频频的产生内存溢出的现象, 从界面上并没有看到什么太大的数据量,后来发现,这些罪魁祸首原来是那些隐藏起来的没有用的label 岛的鬼。最后在逻辑中这样处理的,在该label 用完的时候,调用label 的dispose() 方法就可以了。但是大家要注意,一定要确保在label 不用了之后在dispose(),否则会引起组件失效的异常。
三、特殊情况的处理
组件的dispose方法是销毁当前组件所暂用的资源,但是并不是你调用了dispose方法就可以销毁当前的组件,这个还和组件内对象关联有关系.再加上rap本身单线程的实现机制,有些对象是常驻内存的这样就造成了对象不能正常销毁的情况
举个例子:大家在使用rcp/rap的时候肯定是要实现很多 composite对象,每个composite对象里面可以还要调用其他很多composite、资源、或者其他对象的引用,这个时候如果你调用当前对象的dispose()方法并不能销毁当前对象,因为对象里面的很多资源都是存在并且没有被销毁的,特别的在类的关系很复杂的情况下,销毁对象是更不可能的事情
处理方式:实现composite对象的时候 一定要重写 dispose(),在此方法中一定要释放所有的资源,比如数据库资源,对象引用,要保证所有的引用都置空,这样能提高虚拟机回收速度.
四、如何校验程序的对象是否正常释放
大家可以使用JProfile 分析一下内存来确定某个对象是否正常释放.JProfile同样可以把每个对象和对象的引用都展示在界面上,让你对内存问题一目了然.
经过几个月的rap 项目实战,总结了一些小经验,在这里总结一下,希望对大家有所帮助。
二、销毁的处理
相信学习rap 的同学都知道,swt 中提供了许多的组件,像label、 button、 text等,这些组件在实际中的运用是非常广泛的,当然具体的用法在这里就不介绍了,主要是在我们实际应用过程中应该注意的地方,那就是用过后要记得销毁组件。
从我们项目中来说,在我们的项目中应用了大量的label 组件,并且会有频繁的增加和删除的功能。此时就会有大量的无用的label产生,如果不销毁这些label ,那将会占用一些空间资源信息。起初在做项目的时候没有考虑到这个问题,频频的产生内存溢出的现象, 从界面上并没有看到什么太大的数据量,后来发现,这些罪魁祸首原来是那些隐藏起来的没有用的label 岛的鬼。最后在逻辑中这样处理的,在该label 用完的时候,调用label 的dispose() 方法就可以了。但是大家要注意,一定要确保在label 不用了之后在dispose(),否则会引起组件失效的异常。
三、特殊情况的处理
组件的dispose方法是销毁当前组件所暂用的资源,但是并不是你调用了dispose方法就可以销毁当前的组件,这个还和组件内对象关联有关系.再加上rap本身单线程的实现机制,有些对象是常驻内存的这样就造成了对象不能正常销毁的情况
举个例子:大家在使用rcp/rap的时候肯定是要实现很多 composite对象,每个composite对象里面可以还要调用其他很多composite、资源、或者其他对象的引用,这个时候如果你调用当前对象的dispose()方法并不能销毁当前对象,因为对象里面的很多资源都是存在并且没有被销毁的,特别的在类的关系很复杂的情况下,销毁对象是更不可能的事情
处理方式:实现composite对象的时候 一定要重写 dispose(),在此方法中一定要释放所有的资源,比如数据库资源,对象引用,要保证所有的引用都置空,这样能提高虚拟机回收速度.
四、如何校验程序的对象是否正常释放
大家可以使用JProfile 分析一下内存来确定某个对象是否正常释放.JProfile同样可以把每个对象和对象的引用都展示在界面上,让你对内存问题一目了然.
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* csdn 横长 */google_ad_slot = "7322168821";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- Eclipse rap 富客户端开发总结(12) -Rap 优化之组件的销毁
- Eclipse rap 富客户端开发总结(5)- RAP国际化之路
- Eclipse rap 富客户端开发总结(2)- rap项目目前的进度和存在的问题
- Eclipse rap 富客户端开发总结(3)- rcp/rap目前界面上的一些差异
- Eclipse rap 富客户端开发总结(7) - 如何修改rap的样式
- Eclipse rap 富客户端开发总结(10) -Rap不同系统间的差异和处理方式
- Eclipse rap 富客户端开发总结(1) - rap简单介绍和开发环境搭建
- Eclipse rap 富客户端开发总结(4)- 如何搭建 rap 中文开发环境
- Eclipse rap 富客户端开发总结(8) - 发布到tomcat后解决rap编码和字符集的问题
- Eclipse rap 富客户端开发总结(6) - 如何发布rap到tomcat
- Eclipse rap 富客户端开发总结(9) - rap上传与下载
- Eclipse rap 富客户端开发总结(11) -rcp/rap与spring ibatis集成
- Eclipse rap 富客户端开发总结(13) -Rap/Rcp保存按钮处理方式
- Eclipse rap 富客户端开发总结(14) -rap 图片、数据缓存处理
- Eclipse rap 富客户端开发总结(15) -rap如何使用js
- Eclipse RAP 开发入门
- Eclipse rap 开发经验总结
- Eclipse开发rap的简单例子
- java linux so
- 2.6 内核引导过程
- Concurrent In Java
- ehcache中的timeToLiveSeconds和timeToIdleSeconds时间
- Python多线程编程
- Eclipse rap 富客户端开发总结(12) -Rap 优化之组件的销毁
- jxl 与poi 区别
- The APR based Apache Tomcat Native library which allows ...java.library...异常
- JTS Geometry Operations(一)
- ajax回调函数执行顺序带来的同步异步问题
- django模板中直接使用session
- 存储分类分析:DAS、NAS、SAN
- @suppressWarnings("unchecked") java 中是什么意思
- 2012.2.21