J2ME移动软件程序设计第7章
时间:2025-05-26
时间:2025-05-26
J2ME移动软件程序设计
第7章J2ME应用程序的性能优化
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计知识点: 代码优化的一些基准 优化内存使用 优化代码运行速度 优化用户界面 合理地打包应用程序 J2ME的程序兼容性
本章导读:本章主要介绍如何优化一个J2ME程序的性能。对 J2ME中字符串编程、用户界面编程、MIDlet打包和加密 等工作进行了详细讨论,并对如何提高性能给出了切实可 行的方法。
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计 7.1 代码优化的一些基准7.1.1 代码优化基准概述 在J2SE(Java 2的标准版)中,可以提供许多工具来对 代码性能、代码运行瓶颈、内存使用情况等进行检测。 J2ME 中不存在这些工具,需要使用一些传统的方法来 测试和优化代码。 在MIDP的API中提供了几种对测试和优化代码很有用的 方法。
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计7.1.2 内存测试基准 使用http://www.77cn.com.cnng.Runtime中所提供的两种方法 public long freeMemory();给出当前有多少字节的剩 余内存可以使用。 public long totalmemory();给出在当前运行环境中总 共的存储器大小。
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计 例:查明一个对象到底需要使用多少内存(变量size中 ) Runtime runtime =Runtime.getRuntime(); long before,after; System.gc(); before =runtime.freeMemory(); Object newObject =new String(); after =runtime.freeMemory(); long size =before -after;
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计7.1.3 时间测试基准 采用传统的方式测试运行速度 long start,finish; start =System.currentTimeMillis(); someMethod(); finish =System.currentTimeMillis();
long duration =finish -start;
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计 7.2 优化内存使用7.2.1 优化内存概述 在J2ME环境中内存总是稀缺的 内存分配和垃圾收集器的运行将可能使应用程序的运行 速度变慢 在J2ME环境中小心使用内存
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计7.2.2 创建和删除对象 每当创建一个新对象时,内存将被重新分配,而分配内 存将花费很多时间。 在一个循环体开始处创建的对象,有可能在循环体的尾 部被释放。这就意味着,每一次循环体的执行就将激发 系统运行一次垃圾收集器,这样将导致循环体的执行速 度与垃圾收集器的运行速度差不多。 解决方法:将对象的创建从循环体内放在循环体外。
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计7.2.3 字符串和字符串缓存 使用“+”操作符连接两个字符串时,有可能导致新的字 符串对象的创建,而新字符串对象的创建又将触发内存 管理工作 解决方法:放弃使用字符串和字符串缓存,
而使用字符 数组。
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计7.2.4 正确处理内存不足 当一个对象被创建时,如果发生内存不足的错误, MIDlet将抛出http://www.77cn.com.cnng.OutOfMemoryError异常。 解决方法:使用 try/catch 来拦截异常,并当异常出现时 给用户合理的解释。
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计 7.3 优化代码运行速度7.3.1 优化循环 一切可以在循环体外部预先计算好的值都不应该放到循 环体内部计算。 例:避免在循环体中对v.size() 的重复调用 优化前 for (int i =0;i <v.size();i++){ Object o =v.elementAt(i); //处理对象o } int size =v.size(); for (int i =0;i <size;i++){ Object o =v.elementAt(i); //处理对象o }
优化后
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计7.3.2 使用数组代替对象 矢量和哈希表既简单又方便,但它们会增加大量的系统 开销。 数组通常比集合类运行得更快、更可靠。
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计7.3.3 使用缓存I/O 应该尽量避免从数据流中读写一个字节。 尽量使用带有缓冲的流读写方法。 BufferedReader和BufferedWriter两个类可以提供内置的 缓冲 I/O 功能,但在J2ME中没有提供这两个类,因此如 果要提高I/O效率,就应该自己设计符合要求的带有缓冲
的I/O方式。
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计7.3.4 主动清理内存 一旦不再使用所用内存,就应该立即释放,以提高应用 程序的性能。 如果有数组不再使用了,设置数组指向 null ,使数组能 被垃圾收集器收集。 如果程序需要马上进行内存垃圾搜集工作,显式地调用 System.gc()方法来实现。
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计7.4 优化用户界面 在台式计算机上能很快执行完毕的程序,在移动电话上 都可能需要很长的时间才执行完。 MIDlet 的界面设计必须能让用户感到程序在运行,而不 是长时间没有任何反应的等待。 在程序执行需要较长时间的地方加入一些进度指示器 (例如标尺),这样用户才能够知道程序在执行需要大 量时间的运算。 在MIDlet 的界面设计中,基本的准则是:简单明了、使
用快捷、响应及时和信息丰富。
china_54@http://www.77cn.com.cn
J2ME移动软件程序设计 7.5 合理地打包应用程序 仅仅打包使用的代码 使用代码加密保护程序
china_54@http://www.77cn.com.cn
…… 此处隐藏:857字,全部文档内容请下载后查看。喜欢就下载吧 ……