MIDlet的优化 MIDlet的优化

MIDlet的优化

  • 期刊名字:固原师专学报
  • 文件大小:583kb
  • 论文作者:蔺勇
  • 作者单位:宁夏师范学院
  • 更新时间:2020-09-29
  • 下载次数:
论文简介

第27卷第3期固原师专学报(自然科学)2006年5月. No.3 Vol.27Joumal of Guyuan Teachers College (Natural Science)May. 2006MIDlet的优化蔺勇(宁夏师范学院数学与计算机科学系,宁夏固原756000)摘要:MIDlet运行在低速 、小内存的设备和窄带的网络环境中,因此MIDlet程序设计中应该有针对性地进行优化.文章分析了影响MIDlet运行的各因素,提出了对象重用、主动垃圾回收、使用高效协议等优化方法,并讨论了这些方法实施中需要解决的问题,关键词:J2ME;MIDlet;优化;无线中图分类号:TP393. 19文献标识码:A文章编号:1001-0491(2006)03- -0034- -041引言J2ME是Java针对移动设备的版本, MIDlet是指J2ME在手机、PDA上的应用程序(又可称作KJava程序).将信息管理系统扩展到无线领域的诸多方案中,基于KJava的移动客户端是相对较好的选择,因为,它可以支持广泛的网络协议,具有良好的安全性和平台交叉的兼容性.这种跨平台、设备无关的特点是目前所有的手机和PDA开发工具都不具有的特性.但是,J2ME在支持手机的CLDC规范中规定,该类设备有如下特征叫:●有128KB内存供Java运行;●32KB供运行时分配的存储空间;●受限制的用户接口;●能量有限,主要以电池提供能量;●网络连接可能是窄带宽、不稳定的、且以无线连接为主.这说明MIDlet所运行的硬件环境和网络环境都无法与桌面系统比,MIDlet运行的移动设备是资源受限制的环境,这些限制可概括为:移动设备的处理器运算速度低;移动设备内存有限(-些移动电话限制MIDlet程序为30k);网络连接速度慢.在这样的系统上运行的程序,如果不作任何优化,就很难保证它既完成预期的功能又运行流畅,所以优化是J2ME程序设计必须的环节.下面主要从运算速度、内存使用和网络三方面讨论优化的方法.2为提高速度而作的优化MIDlet在不同手机上的性能特性可能会有显著的不同(在种手机卜姓能奶佳的实现方法,在.另一种手机上却不一定是最好的.例如,在某种手机上,某中国煤化工va实现,但在另一FYHCNMHG收稿日期:2005-12-09作者简介:蔺勇(1973- -),男,宁夏固原人,硕士,讲师。第27卷第3期蔺勇:MIDlet的优化35种手机上,该方法却可能封装了使用本机语言编写的更快的方法.所以速度优化的第一个原则就是尽量采用接近本机语言的方法,其次应该从以下方面优化:2.1使 用数组不使用对象数组通常比类和类集更快更小,在MIDlet中应该尽可能使用数组以提高运行速度. MIDlet中使用频度比较高的类和类集有String 和StringBuffer以及Hashtable 和Vector3) ,下面分别讨论他们与数组之间如何选择.在处理字符时,直接使用字符数组将比处理String和StringBuffer更有效. Strings 是Java中唯一把“+”操作重载的类,但每个字符串联,都将创建一个新的对象.所以如果在循环内组装-一个字符串,就应该考虑引入StringBuffer ,从StringBuffer创建String 时,String指向相同的字符数组,这样不会增加系统的开销.但是如果修改StringBuffer,则会从原来的数组通过复制创建一个新的字符数组.因而StringBuffer创建新对象时不是-一个严密的方法.所以,最好的优化是完全不用String 和StringBuffer,而是用字符数组.但觱要注意的是,很多APIS要求Strings作为参数并以此作为返回值,所以采用数组后就要不停地在string和字符数组之间作大量的转换.类集Vector和Hashtable使用简单有效,但却附加着一些需要被精简的东西.Vector只是一个数组的包,所以如果能直接处理-个数组,那么就可以节省下一些内存和处理器时间.同样地,如果有一个简单的关键对象到有用对象之间的影射,则可以采用对象数组而不是Hashtable.如果一定要使用Hashtable或Vector,应该在创建他们时准确地确定其大小.这是因为Vector和Hashtable会随运行需求改变内存占用大小,带来额外系统开销.Vector和Hashtable都有构造函数允许指定集合的初始大小.使用时应该最精确地指定集合的大小,这样才能最大限度地减少使用Hashtable或Vector带来的运算开销.2.2使用具有缓冲的 I/O接口虽然流类提供了每次只写一个字节的方法,但是应尽量避免对这种方法的使用,不应每次从流中只读一个字节,或者只向流中写一个字节,而是应该建立缓冲同时读写一个数组的所有数据,这样更为有效. J2SE提供了BufferedReader 和BufferedWriter类,用以提供I/0缓冲的功能,但在MIDP中没有提供这样的类,所以如果使用I/O缓冲的功能需要设计者自己动手来做.2.3 对象重用应避免产生不必要的“垃圾”对象,尽量重用现有对象.其中Immutable(不可变对象)是一个特例,它们的状态自对象创建后就不能改变,由于不可变对象有利于代码的可靠和线程的安全,因此得到了广泛使用.然而,如果其初始值失去意义,例如,如果它们代表的值发生了改变,此时不可变对象极易变成垃圾对象.这样每一次改变都会创建一个具有新值的新的不可变对象,而相应的旧对象则被废弃等待作为垃圾收集.就MIDlet来说,使用不可变对象的代价要高于它所能得到的利益,因此,此种情况下最好使用可以赋新值的可重用对象. .2.4多线程多线程使MIDlet具有更好的性能,这是因为,当一个线程正等待某种条件时(如等待一个HTTP响应,或等待用户输人),另一个线程仍可以工作,它不能提高处理器速度,相反,可能使处理器速度降低,但是它可以使用户感到速度加快了.使用多线程时需要注意,Java线程不一定具有抢先权,而是相互协作,因此代码不应在“死循环”中等待所需条件,而应该中国煤化工龙wait方法.MHCNMHG3优化内存资 源的使用-般说来,移动电话的堆内存都不大.例如,某些诺基亚MIDP手机仅提供150KB的MIDP堆内固原师专学报(自然科学)2006年5月存.所以不经常使用的屏幕(如帮助,选项等)应该在用到时才创建,并在每次使用后通过作为垃圾被收集而释放其所占空间.这样做是通过牺牲执行速度而换取了额外的堆内存.但是资源释放也能够加快程序的执行.如果内部数组或数据结构不再使用,应当及时释放他们.释放的方法是设置数组指向空,这样数组就被垃圾桶收集.如果需要更快地把内存释放给运行系统,则可以通过主动调用System.gc()来作垃圾收集.但是要特别注意“内存泄漏”.当不再拥有某个对象,但却在某些地方仍然存在对它的引用时,就会发生内存泄漏.所以当不能摒弃对某个无用对象的引用时,应将引用设为空(这样将使其不会被作为垃圾被收集).每次在内存中创建(用new)对象时,内存都被分配,内存分配是需要时间的.最坏的情况是对象在循环初始时创建而在循环末尾就结束对象的使用.这将意味着整个循环中运行环境将不停地进行垃圾收集.循环中创建一个对象是对执行的双重不利:首先是创建要付出代价,然后垃圾回收同样需要开销.因此MIDlet设计中创建和丢弃都要慎重.4优化网络资源的使用网络速度通常按照带宽和延迟时间来衡量,这两项指标都有平均值和浮动差.即使平均值是可接受的,如果浮动差过大,用户也是常常难以接受的.对于大数据量传输,带宽通常对网络速度的影响是主要的.而对小数据量传输,延迟时间更为重要.这两种性能指标的量度都取决于网络技术和网络连接的特定属性.所以,般意义上给出精确数据是不可能的.但可以给出一些概念化数据以帮助设计.表1给出的一些特征值是最近从诺基亚内部研究和非正式测试中获得的.表1移动设备网络环境带宽(千比特每秒)HTTP往返延迟的首次值HTTP往返延迟的随后值GSM电路交换数据(CSD)9. 6kbps .5- 10秒2-3秒GSM高速电路交换数据(HSCSD)43kbps5-10秒2- 3秒GPRS5 - 50kbps2-4秒这两种性能指标的量度都取决于网络技术和网络连接的特定属性.对付网络延迟的一个可行解决方法是使用各种异步网络操作(利用一个后台网络线程).例如,如果用户正向储存服务器发送一个内容时,就没有必要将MIDlet的其它部分挂起而等待这一操作的完成;相反,可以让后台网络线程来处理这一动作,而用户则可以进入下一个程序单元.除此之外还应从以下方面进行优化处理:4.1 限制HTTP的往返传输由于无线网络中的HTTP延迟时间较长,因此应该努力减少MIDlet使用的HTTP往返传输次数.最小化MIDlet所发送的信息包的数量和大小,应该一次性地获取它所需的全部内容,避免MIDlet向服务器发送-成不变的消息.如果MIDlet要从几个不同的数据源收集数据,一种可选的方法是用一个代理servlet来收集[(] ,这样MIDlet仍然只需要发送一次请求.网络连接处理完以后应该予以释放,可使用finally语句,否则从连接的输人流中读数据时如果抛出了异常执行跳转到异常句柄,而输入流和连接一直都不被关闭.在J2SE环境下,内存较大,这可能不是个大问题.但是MIDlet保持连接可能是一个灾难.中国煤化工4.2避免低效协议YHCNMHGMIDlet中SOAP等基于XML的复杂协议可能由于数据大小、解析时间和解析代码大小等高端开销而变得非常低效.因此设计MIDP客户端基于XML的协议,应该使其尽可能地简洁.如果不需要这第27卷第3期蔺勇:MIDlet的优化37些协议的高级功能,则可以用一个简单的自定义协议(例如username = fred, password= secret)来发送同样的信息,这样效率会高得多.-般说来,如果使用某个简单自定义协议,那么设计者就要既写MIDlet客户端又写服务器端(如servlet).这就帶要注意版本管理,当升级客户端和服务器时如使用一个新协议,而对应的MIDlet仍然使用旧协议,就会产生错误,这可以通过在客户端和服务器间的开放式通信中包含协议的版本号来避免,如果MIDlet与不受自己控制的服务器通话,或者某台服务器要与除MIDlet之外的其它客户端通话,则MIDlet可能不得不用XML或SOAP与之通信.在这种情况下,可以使用代理servlet5].如图1所示代理servlet可以在SOAP或XML协议与MIDlet自定义协议之间实现转换.它根据每个MIDlet请求对应地发送-系列SOAP或XML请求,由于代理servlet和服务器之间通过一个快速固网连接,因而这样做的效率很高.lower bontridhhighr bandridhbigher latenryloner latengyigher costlonercost( Proxy servletNaMoCuston protocolSOAPXML图1:代理Servlet5结束语通过上面的论述,MIDlet程序设计中优化的方法很多都不利于Java面向对象的功能发挥.所以,优化是设计者牺牲设计的便捷性换来的性能提升.在现有的硬件环境下主要制约MIDlet程序性能的还是移动设备的硬件功能,系统整体性能的提高有待于硬件技术的发展,软件的优化能提高系统效率,但还不能从根本上解决运行速度问题.参考文献:[1] JSR68 ,2ME Platform Specification[S].的性能优化技术[J].计算机工程,2004,18:46- - 48.[2]徐文峰.基于J2ME的Java手机软件开发[J].微[5]窦文,贾焰,邹鹏.关于嵌人式Java技术的研究型机与应用,2002,1:32 - 34.[C].2002年亚太地区高速网络(APAN)上海会议论文[3] JSR37 ,Mobile Information Device Profile[S].集。2002,144-147.[4]李允,罗蕾,雷昊峰,熊光泽.嵌入式Java虚拟机MIDlet OptimizingLIN Yong(Department of Mathematics& Computer , Ningxia Teachers' University, Ningxia ,Guyuan 756000)Abstract: The device MIDlet running has low processor , small memory and narrow band net-work. Application of MIDlet should be optimized. Thisand put forwardsome optimizing method: object reused, garbage collectec中国煤化工ocol. How to userYHCNMHGthem are also discussed.Key words : J2ME;MIDlet;optimizing; wireless(责任编辑胡茂林)

论文截图
下一条:优化计算
版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。