Eclipse rcp/rap 开发经验总结(12) -Rap 优化之组件的销毁
程序员文章站
2022-05-17 23:45:31
...
一、概述
经过几个月的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同样可以把每个对象和对象的引用都展示在界面上,让你对内存问题一目了然.
推荐阅读
-
Eclipse rcp/rap 开发经验总结(12) -Rap 优化之组件的销毁
-
Eclipse rcp/rap 开发经验总结(10) -Rap不同系统间的差异和处理方式
-
Eclipse rcp/rap 开发经验总结(7) - 如何修改rap的样式
-
Eclipse rcp/rap 开发经验总结(2)- Eclipse rap项目目前的进度和存在的问题
-
Eclipse rcp/rap 开发经验总结(10) -Rap不同系统间的差异和处理方式
-
Eclipse rcp/rap 开发经验总结(7) - 如何修改rap的样式
-
Eclipse rcp/rap 开发经验总结(3)- rcp/rap目前界面上的一些差异
-
Eclipse rcp/rap 开发经验总结(12) -Rap 优化之组件的销毁
-
Eclipse rcp/rap 开发经验总结(8) - 发布到tomcat后解决rap编码和字符集的问题
-
Eclipse rcp/rap 开发经验总结(3)- rcp/rap目前界面上的一些差异