站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题J2ME设备的实际性能 (感谢JtoMe工作室的辛勤工作)

J2ME设备的实际性能 (感谢JtoMe工作室的辛勤工作)

摘要: J2ME设备的实际性能 (感谢JtoMe工作室的辛勤工作)
<tr><td>
http:///tech/article675.html
[转载于JtoMe工作室 http://paco.gz1000.net/CN/index.asp]
译者:zjs
原文见 http://www.javaworld.com/javaworld/jw-10-2002/jw-1025-j2mebenchmark.html

J2ME设备的实际性能
性能标准可以帮助开发者开发出更好的应用程序
摘要
设备的性能可以帮助开发者开发出能让用户有好的体验的应用.了解性能可以帮助开发者了解每种设备的优缺点以及为具体设备开发合适的应用.进行性能测试是从底层来评价设备的.这篇文章是描述的是关于现有一些的J2ME(Java 2 Platform,Micro Edition)设备在Java 无线应用核心性能测试结果的文章.测试中心根据设备在测试中的性能分成不同的几类:虚拟机(VM)性能, 线程切换(thread-switching), 图形(graphics), RMS (record management system), 网络通信性能(network communication), 以及XML解析(XML parsing).
第一部分:J2ME设备:真实性能
[]J2ME(Java 2 Platform,Micro Edition)设备早已在亚洲与欧洲推出,现在也开始在美国推出了.厂商早已经推出了成千上万具有J2ME功能的GSM手机和PDA,不久的将来J2ME平台将成为通信设备/消费类设备等基本的功能.java的跨平台特性将允许一个程序可以在不同设备上运行.
然而,随着java设备越来越多,由于处理器,虚拟机还有设备的内存的不同导致针对某个产品的应用也存在很大的差异.不同的商家可能会开发出各自的虚拟机.因此,设备性能是编写适合的程序的前提.在桌面平台活服务器环境下,广泛被接受的传统的指标有:CaffeineMark, Linpack, SPECmarks和Dhrystones,但却大多与J2ME设备的性能无直接联系的.J2ME设备属于嵌入式的轻量级的运算设备,而不具备传统桌面或服务器同样的性能.所以,我们必须先弄明白怎样来测试J2ME设备的性能.
J2ME设备强调的不是巨大的运算量和复杂程度,而是简单的用户业务.因为特别小的屏幕尺寸和很麻烦的输入系统,使得有一个良好的用户体验的用户界面和运算成为每一个J2ME应用极其重要的一个要求.
在这篇文章里,我们从用户的角度来测试J2ME设备的性能,而不是从特定设备的处理器或运行的操作系统出发的.测试关注的是通过启动某个特定的功能,看能否为用户带来良好的体验.
目标平台
因为当前市场上出现的内置J2ME平台的设备只有支持CLDC 1.0和MIDP 1.0,我们的测试是基于J2ME CLDC/MIDP1.0的.等将来支持更高的J2ME版本的设备出来之后我们再更新这个基准.
测试的设备
截止到2002年5月15日,市场上已经可以找到70多种支持J2ME的移动设备,而且数量还在很快的增长中.
在测试中我们用到下列设备,这里是根据设备的功能分类,而不是根据性能分类.
[]通用的java电话 :
Siemens SL45i/6688i
Siemens M50 (也就是3118)
智能电话:
Nokia 9210 Communicator
Nokia 7650
Motorola Accompli 008 (也就是A6288)
Motorola 388
PDA:
Palm m125
[] Handspring Treo 270 Communicator
iPAQ 3760
J2ME Wireless Toolkit (PC模拟器)
虽然J2ME Wireless Toolkit 1.04 有根据设备定制,异常跟踪,内存使用管理等功能,但为了更好的作比较,我们都不使用这些功能,而且是基于Microsoft Windows2000和Intel Pentium4 1.5-GHz的环境下来测试我们的基准应用程序的.
[]iPAQ3760支持PersonalJava(Jeode)和J2ME(IBM J9 VM).通过ME4SE技术,J2ME应用程序可以转换成PersonalJava应用程序然后在PersonalJava环境测试.在iPAQ3760上我们同时使用Jeode和IBM J9环境来测试我们的基准程序.
在Palm m125,我们用了两个不同的J2ME虚拟机:
1.Sun的MIDP for Palm OS 1.0,可以从Sun的网站下载
2.IBM的J9 VM for Palm,在IBM WebSphere Studio Device Developer 4.0(可以**下载)自带
这里我们列举了内置J2ME(MIDP1.0)的移动设备的最低硬件要求:
Java version: CLDC 1.0 + MIDP 1.0
Memory needed: 128 KB of nonvolatile memory for MIDP components, 8 KB of nonvolatile memory for application-created persistent data, 32 KB volatile memory for Java runtime
Screen size: 96 x 54 pixels
Display depth: 1 bit
Pixel shape: 1:1
Networking: Two-way, wireless, with limited bandwidth
Input: One or more of the following: one-handed keyboard, two-handed keyboard, touch screen
第二部分:测试步骤
测试步骤
[]因为不同的设备有不同的硬件配置、操作系统和Java实现平台,我们提供一个一般的标准和相关的应用程序来测试和比较各种各样的J2ME设备的性能。我们定义了基准的两个不同层次:核心层次和应用层次。
核心层次:
我们拿出一个具有普遍意义的主意:看看这些J2ME虚拟机在执行常见的通用指令的时候所消耗的时间,这些指令有:逻辑比较、循环、方法调用、比较API调用等,对于这些低层次的指令,这里我们只考虑它们的速度性能。这些核心层次的测试是与应用程序无关的。
应用层次:
我们有一个普遍性的想法:看看不同的J2ME设备在运行常见的应用接口的时候所消耗的时间,例如在显示屏上绘制一张图片、打开一个HTTP连接、在本地文件系统储存数据、解析XML文档等。因为有些会消耗更多的内存,所以在定制基准中我们会给出内存使用信息。然而,因为不同的J2ME设备在内存占用原理方面几乎没有什么不同的,所以在确定的基准程序中我们不再考虑内存问题。
我们只对通用的J2ME平台性能设定基准,而不对个别的应用程序的性能或对应用程序的瓶颈做优化而设定的基准。但应用程序开发者可以通过了解我们的基准测试来比较那些占用更多处理器时间和堆栈大小的程序。开发者可以通过这些基准来判断那些内嵌有J2ME平台的设备的性能。
很多公司为Java性能定义了一些基准程序策略(有些是**的,有些则不是),大部分是用来测试桌面和服务器端的运行环境的,有些还提供了功能强大的工具,例如支持线程管理。在我们的标准中,我们会沿用基准的通用程序,还会用到典型的测试域。
在核心层次的测试中,我们选用了J2SE基准程序的通用测试域,同时还会加上一些我们自己的。在每一个测试域中,我们执行一个带有一小段测试代码的循环语句,从结果中我们就可以获得其速度(循环次数/秒),我们建立了一个名为JKernelMark(version1。0,10kb)的应用程序来作为核心层次的基准程序。
在应用层次的测试中,我们先定义了一些测试域,在每个测试域里我们执行带有一段测试代码的方法,从结果中就可以得到速度(每执行一次的毫秒数)。我们根据不同的J2ME API制作了不同的基准程序,为J2ME标准API制作了JAppsMark(version1。0 14KB)程序,为第三方API,例如关于XMLParse的,我们用kXML制作了JXMLMark程序(version1。0 21KB)来测试XML解析。
基准程序的细节
每一个基准程序都会用一个MIDlet来执行,下面解释我们在测试中用到的每一个基准程序。
JKernelMark
[]JKernelMark测试的有:
过滤:这是一个在给定数学公式和条件的情况下可以得到精确的结果的算法.
循环:JKernelMark测试虚拟机对循环优化到什么程度.这是一个能输出精确的表达式循环的结果.基准程序将这个结果放到一个数组中,并颠倒了数组的排列顺序.
逻辑运算:JKernelMark可以测试VM对逻辑结果的运算速度.JKernelMark创建了很多Boolean类型的变量,并且在很多循环语句里对这些变量进行取反运算.
字符串:在这里,我们测试了VM对典型的字符串操作的运算速度.JKernelMark在一个循环结构里创建了一个StringBuffer变量,接着添加一个字符串到这个StringBuffer变量去,并且准确指明新字符串的位置.
方法:JKernelMark测试VM在处理方法调用的时候的速度.它是通过计算递归函数总共需要的时间的.
内存分配与垃圾回收:这里,JKernelMark测试内存分配的速度以及垃圾回收对性能的影响有多大.它连续地在内存里创建新的对象和字节数组(每个循环大约要在堆栈里创建20KB的对象)如果内存不够的话,系统会开始回收垃圾同时会明显的影响创建新对象的速度.
JKernelMark 得分标志:每秒循环的次数;得分越高说明性能越好.
JAppsMark
JappsMark测试的内容用:
网络通信:用Java手机通过HTTP连接到一个Web系统,并且从响应中读取200byte的信息,同时记录下总共所消耗的时间.测试的执行时间也包括了网络的延迟.如果测试失败,我们记录为测试失败.尽管一部手机内嵌了J2ME,但你还是需要一张能提供数据服务的GSM或GPRS的SIM卡.当然也有其它方法来配置J2ME设备来完成这种测试,这里不作介绍.例如你可以直接把手机与PC连接起来.
低层的图形用户界面(Low-level GUI):JAppsMark测试了Java手机在屏幕上绘图的性能.这个测试是通过加载一个图片文件并随机在一个250象素的canvas描绘出来,并记录不同的设备子完成这个程序所消耗的时间.
[]RMS (record management system):关于RMS测试,是用一个MIDP程序创建一个record store,增加一条记录,从新返回RecordStore对象,通过反复地记录,最终删除这个record store,并记录不同设备在完成这个过程所消耗的时间.
线程转换:JAppsMark测试VM在线程转换方面的速度.
JAppsMark的得分表明:每运行一次的毫秒数;这个数字越小,性能就越好.
JXMLMark
XML解析在J2ME里是很有趣的,J2ME还没有标准的XML相关的API.因为普通的XML解析相对于移动设备来说显得太笨重了,包括运行时性能、用户的感觉、代码的大小等性能参数在J2ME的XML解析里就显得十分重要了。
有三个方法可以解析XML:
1、原型解析读入整个文件,并且在内存里创建一个文件的映射。原型解析比其它类型的解析占用的内存多得多。
2、推动式解析虽然也是读入整个文件,但是它把文件分成很多部分,并且连接了一个对象监听器。这就是流行的SAX (Simple API for XML)解析的运作原理。
3、拉式解析每次只读取文件的一小部分,应用程序通过反复的请求让整个文件被解析。
[]尽管MIDP 1.0没有包括XML解析,由于XML的重要性,Sun打算在MIDP2.0里添加一个能够实现跨平台数据交换的微型且高效的XML解析器。
在轻量型的XML解析器中,kXML是最流行并且使用标准XML解析API,能在MIDP环境运行的XML解析器之一。
因此我们把kXML作为XML解析的基准速度的基本的API。我们使用的是kXML1.21,因为kXML 2.0还在alpha测试中(我们设计我们的程序的时候)。
因为内存有限,所以J2ME移动设备只能解析很小的XML文件。我们创建了一个简小的XML文件作为我们的基准,如下所示。DTD (document type definition)不是必要的,因为kXML不支持DTD。
<?xml version="1.0" encoding="UTF-8" ?>


<header>
xxxStatus
xxxCommand
xxxMessageId
xxxProcessingRule
</header>
<body>
1

cvalue
</body>


我们用一般的方式从头到尾来解析这个XML文件并读入每个标签、每个属性、每个值。需要更详细的信息可以参考Jonathan Knudsen的"Parsing XML in J2ME"。
我们计算解析这个文件所需的时间(毫秒),并把这个时间作为得分。
得分的意思:每解析整个文件所需的毫秒数;这个数字越小,表明性能越好。
[]第三部分:基准程序
基准程序
以下几张图片显示JKernelMark1.0基准程序运行时的情形;JAppsMark、JXMLMark与JKernelMark基本一样。
540) this.width = 540'>
图一:测试开始
540) this.width = 540'>
图二:测试进度和可用内存
540) this.width = 540'>
图三:显示测试结果
测试的结果
我们把测试的分数用下表表示,主意这只是最后的得分。
表1http://www.javaworld.com/javaworld/jw-10-2002/images/jw-1025-j2mebenchmark4.gif,JKernelMark的结果,最后的答案取六次测试的几何平均数。
540) this.width = 540'>
表2到5显示JAppsMark的结果
[]Table 2. Network communication
http://www.javaworld.com/javaworld/jw-10-2002/images/jw-1025-j2mebenchmark8.gif
[] 540) this.width = 540'>
[]Table 3. Low-level GUI
http://www.javaworld.com/javaworld/jw-10-2002/images/jw-1025-j2mebenchmark6.gif
[] 540) this.width = 540'>
Table 4. RMS
http://www.javaworld.com/javaworld/jw-10-2002/images/jw-1025-j2mebenchmark7.gif
540) this.width = 540'>
Table 5. Thread-switching
http://www.javaworld.com/javaworld/jw-10-2002/images/jw-1025-j2mebenchmark5.gif
540) this.width = 540'>
[]表6显示JXMLMark结果
http://www.javaworld.com/javaworld/jw-10-2002/images/jw-1025-j2mebenchmark9.gif
540) this.width = 540'>
基准程序的准确性
整个测试是在程序一启动就立刻进行,当测试员想重新测试的时候,他必须终止原来的程序,然后从新开始。
[]我们在同一部设备上测试每个基准程序至少3次以上(包括三次)。我们选择最好的结果作为最后的得分。
所有的数据都来自于我们的实际测试结果。我们的测试结果在很多设备上都是稳定的,但iPAQ3760例外(Jeode PersonalJava environment),我们不在这篇文章里为统计的方式做太多的说明。
没有一个基准程序是完美无缺的,例如JKernelMark基准的结果就不能充分地证明设备A的J2ME平台比设备B的J2ME平台快。但至少可以证明:当运行JKernelMark的时候设备A比设备B跑得更快。我们会尽可能的使我们的基准程序具有公平性、代表性和准确性。
测试结果报告
为了能让你更好的理解现有J2ME设备在virtual machines, graphics, network connections, and XML parsing 等方面的性能,我们给出一份关于kernel 测试结果的分析报告.
Graphics (gaming)
从JAppsMark的结果来看,大多数J2ME设备,无论是PDA,智能电话还是低端的移动电话,在绘图方面的性能是相近的。这意味着游戏开发者在开发游戏时可以不考虑不同设备的性能问题。当然,对于游戏开发者来说,兼容性是另外一个很重要的问题。(使用彩色还是灰度屏幕?使用100-x-100像素还是200-x-200像素?不过本文不讨论这个问题)
LCDUI
对所有的设备而言,使用J2ME的LCDUI (liquid crystal display user interface)组件就需要占用你的内存。在你的应用程序中要尽量少地建立同一个LCDUI组件的实例,而要多用一些单一的对象引用。
XML parsing (wireless Web services)
无线应用程序和Web services紧密相连,尽管MIDP1.0没有包含任何关于Web services和XML parsing的标准API,但MIDP 2.0将会把这些技术添加进去.
RMS (data-intensive operations)
从JAppsMark测试结果,移动电话(包括低端的手机和智能手机)在RMS操作方面的性能表现得很差.具有很多数据操作的应用程序的开发者必须牢记:你们的应用程序可能会表现出很差的性能.至少到目前为止,J2ME移动电话在数据操作方面还是很欠缺的.
JKernelMark 分析
我们根据kernel基准按照速度从快到慢做一个列表.
Level 1
[]绝大部分的J2ME移动电话(for example, Siemens SL45i, Motorola Accompli 008, and Palm m125), 它们的kernel benchmark 得分比PersonalJava桌面运行环境(Intel Pentium 1.5-GB processor in a J2SE 1.4 environment on Windows 2000)慢10,000倍.大多数这些设备使用Motorola 龙珠33-MHz处理器.
[]Level 2
[]Nokia 9210C的速度大概是Level 1设备的10倍.Nokia 9210C采用一颗ARM9为内核的32-bit RISC(reduced instruction set computer) 为处理器.(虽没有指明,但它的速度在100MHz左右).
Level 3
使用IBM J9 VM的J2ME平台的iPAQ 3760以及桌面J2ME(J2ME Wireless Toolkit Emulator 1.04 with an Intel Pentium 1.5-GB processor, 128 KB of RAM on Windows 2000) 的速度大概是Level 2的10倍.iPAQ 3760系列使用 206-MHz Intel StrongARM 32-bit RISC 处理器.
Level 4
iPAQ 3760的速度(Jeode for PersonalJava) 大概比Level 3的设备快10倍.注意:Level 4和Level 3的硬件相同(iPAQ),但VM不同(J9和Jeode).一个可能的原因是:Jeode使用JIT(just-in-time)技术大大提升了执行基本指令的速度.
Level 5
在桌面的PersonalJava环境(J2SE 1.4 with an Intel Pentium 1.5-GB processor and 128 KB of RAM on Windows 2000), 其速度大约是Level 4设备的10倍.我们没有把这个测试结果列入,是因为它们与J2ME平台和移动设备无关.我们只是拿PersonalJava来做比较而已.
了解你的设备性能
我们的测试为J2ME平台性能的最优化做了一个开头,特别是对于低运算能力/资源有限的设备更为重要.这些基准的结果可以帮助开发者开发或提高应用程序的性能.因此,开发者就不用再开发阶段来猜想他们的应用程序的性能了.在新加波的无线Java确认中心会努力地改善J2ME平台的基准,并且在测试阶段会给出分析报告等。
关于作者:
Wang Yi and C.J. Reddy are Sun certified Java developers working at the Java Wireless Competency Centre (JWCC), Singapore. Gavin Ang is the center's development manager. The JWCC is a partially government funded center in Singapore set up for the purpose of facilitating the development and growth of the Java wireless application and service industry for the Asia-Pacific region.

参考文档:
Java Wireless Competency Centre:
http://www.jwcc.net
Sun's wireless page:
http://wireless.java.sun.com/
The Java Grande Forum Benchmark Suite lists many benchmark applications for the Java platform:
http://www.epcc.ed.ac.uk/javagrande/links.html
For more information on parsing XML in J2ME, read "Parsing XML in J2ME," Jonathan Knudsen (Sun Microsystems, 2002):
http://wireless.java.sun.com/midp/articles/parsingxml/
[]Learn how to run J2ME MIDlets in the PersonalJava environment (Pocket PC) by using ME4SE:
http://me4se.org/
All J2ME devices currently in the market:
http://wireless.java.sun.com/device/#devices
EEMBC, the Embedded Microprocessor Benchmark Consortium, develops and certifies real-world benchmarks and benchmark scores to help designers select the right embedded processors for their systems:
http://www.eembc.org/
Learn more about kXML parser, a lightweight XML parser that can be used in the J2ME environment:
http://kxml.enhydra.org/
JSR 118: Mobile Information Device Profile 2.0:
http://www.jcp.org/jsr/detail/118.jsp
IBM WebSphere Studio Device Developer 4.0 (Micro Edition), from here you can develop and deploy MIDP applications using the IBM J9 environment:
[]http://www.embedded.oti.com/wdd/
For more articles on J2ME and wireless development, browse the Micro Java section of JavaWorld's Topical Index:
http://www.javaworld.com/channel_content/jw-micro-index.shtml
Michael Yuan covers the world of J2ME development in his Wireless Java column:
http://www.javaworld.com/columns/jw-wireless-index.shtml
Chat about devices galore in JavaWorld's Device Programming discussion:
http://forums.devworld.com/webx?230@@.ee6b808!skip=249
Sign up for JavaWorld's free weekly Micro Java email newsletter:
http://www.javaworld.com/subscribe
You'll find a wealth of IT-related articles from our sister publications at IDG.net
[]
http:///tech/article675.html
</td></tr></table></td> </tr> <tr> <td background="/pic/split.gif" height=1></td> </tr> <tr> <td class="tdMargin1">
↑返回目录
前一篇: 发现WTK文档的一处明显错误
后一篇: [转帖] MIDPV2。0规范!