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

当前页面: 开发资料首页J2ME 专题J2ME设备的实际性能-汉土网络

J2ME设备的实际性能-汉土网络

摘要: J2ME设备的实际性能-汉土网络
<tr> <td> <tr> <td colspan="3">IT技术资料馆|编程语言|java系列|J2ME资料|J2ME设备的实际性能</td> </tr> <tr> <td height="38" colspan="3" align="center">

J2ME设备的实际性能

</td> </tr> <tr> <td colspan="3" align="center"></td> </tr> <tr> <td colspan="3" class="text">因为不同的设备有不同的硬件配置、操作系统和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"。

我们计算解析这个文件所需的时间(毫秒),并把这个时间作为得分。

得分的意思:每解析整个文件所需的毫秒数;这个数字越小,表明性能越好。 </td> </tr> <tr>
↑返回目录
前一篇: J2ME学习笔记(1)-汉土网络
后一篇: J2ME入门-(9)CDC API-汉土网络