`

J2ME设备的实际性能

    博客分类:
  • J2ME
阅读更多

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" ?>
<message_list>
<message>
<header>
<status>xxxStatus</status>
<command>xxxCommand</command>
<messageId>xxxMessageId</messageId>
<processingRule>xxxProcessingRule</processingRule>
</header>
<body>
<a>1</a>
<b bvalue="123" />
<c cvalue="1234">cvalue</c>
</body>
</message>
</message_list>

我们用一般的方式从头到尾来解析这个XML文件并读入每个标签、每个属性、每个值。需要更详细的信息可以参考Jonathan Knudsen的"Parsing XML in J2ME"。

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

得分的意思:每解析整个文件所需的毫秒数;这个数字越小,表明性能越好。

 

 

转自:http://ming-fanglin.iteye.com/blog/546274

 

 

 

分享到:
评论

相关推荐

    J2ME教材:J2ME&Gaming中文版

    8. **设备适配**:由于J2ME应用于多种设备,教材会涵盖如何编写跨平台的代码,以适应不同设备的屏幕尺寸、硬件性能差异。 9. **调试与部署**:讲解如何使用模拟器测试程序,以及将应用打包成JAR文件,通过蓝牙、...

    J2ME无线设备编程

    J2ME的跨平台特性使得开发的应用能在多种设备上运行,但需注意设备间的差异,如屏幕大小、内存容量和硬件特性,这可能影响应用的性能和用户体验。 综上所述,J2ME无线设备编程涉及了从环境设置、应用程序设计到网络...

    j2me游戏.rar

    总结,J2ME游戏开发涉及多个层面,从理解平台规范到实际编码和调试,都需要开发者具备扎实的Java基础和对移动设备特性的理解。"j2me游戏.rar"中的游戏可能涵盖了上述各种技术,是学习和研究J2ME游戏开发的宝贵资源。

    j2me点阵字库

    这种方式使得字库占用的空间小,渲染速度快,对于资源有限的J2ME设备而言非常合适。 在J2ME开发中,使用点阵字库通常涉及到以下几个关键知识点: 1. **字库加载**:在J2ME程序启动时,需要加载点阵字库文件,这...

    j2me无线设备编程.rar

    9. **最佳实践**:分享开发J2ME应用时的优化策略、性能调优技巧以及避免常见错误的方法。 此外,压缩包中的"ziliaonet.com使用说明.txt"和"ebook168.com使用说明.txt"可能是网站的使用指南,可能包含了获取电子书...

    郭克华J2ME pdf版下载

    5. **设备兼容性**:探讨如何进行跨平台测试,确保应用能在不同类型的J2ME设备上正常工作。 6. **多媒体支持**:讲解如何处理图像、音频和视频,这对于游戏和媒体应用来说至关重要。 7. **存储管理**:在没有本地...

    J2ME_Map.rar_J2ME 地图_J2ME游戏_j2me 游戏_j2me_m_绘制地图

    在实际开发J2ME游戏时,还要考虑到移动设备的限制,如内存有限、处理能力相对较弱。因此,优化地图数据结构和绘图算法以降低资源消耗至关重要。例如,使用四叉树或Octree等空间分割数据结构可以提高碰撞检测效率;而...

    J2ME开发大全

    1. **KVM(Java Virtual Machine for Embedded Devices)**: J2ME设备上运行的是精简版的Java虚拟机,称为KVM,它专门设计用于资源有限的设备。了解KVM的工作原理对于优化J2ME应用性能至关重要。 2. **MIDP(Mobile...

    J2ME移动设备程序设计

    J2ME书籍则可能深入探讨更复杂的主题,如优化性能、调试技巧、多线程编程等。 对于初学者,建议从基础的J2ME环境搭建开始,学习MIDlet的基本结构和LCDUI的使用。随着技能的提升,可以尝试实现更复杂的应用,如网络...

    J2ME无线设备编程指南

    对于无线设备的J2ME应用,调试通常依赖于模拟器或实际设备。模拟器可以帮助开发者在没有物理设备的情况下测试代码,而实际设备测试确保应用在目标平台上表现良好。 9. **项目实例** 指南可能包含一些项目实例,如...

    j2me例子大全,涵盖j2me的各各方面

    8. **优化与性能**:在J2ME开发中,性能优化至关重要,包括减少内存占用、提高代码执行效率等。开发者需要熟练掌握资源管理、代码优化技巧,确保应用在有限资源的移动设备上运行流畅。 9. **调试与测试**:使用J2ME...

    j2me 手机程序入门,让你快速掌握j2me手机程序开发

    模拟器可以模拟各种设备环境,而实际设备测试可以确保应用在目标硬件上的性能。 通过学习这些基础知识,你可以开始构建简单的J2ME应用,如计算器、小游戏或简单的信息查询工具。随着经验的积累,可以逐步挑战更复杂...

    J2ME平台的RSSReader

    6. **性能优化**:考虑到J2ME设备的性能限制,开发者需要优化代码以提高运行效率。这可能包括减少内存分配、缓存常用对象和优化网络请求,例如使用HTTP缓存头。 7. **错误处理**:在网络通信、XML解析或用户交互...

    J2ME教程【Word版本】

    MIDP定义了MIDlet,这是一种在J2ME设备上运行的应用程序模型。 2. **CLDC(Connected Limited Device Configuration)**:CLDC是J2ME的基础,它定义了一个轻量级的Java虚拟机和一组基本的类库,适应内存和处理能力...

    j2me各种游戏代码

    7. **性能优化**:由于J2ME设备资源有限,优化内存占用、减少绘图操作以及合理调度任务对于提升游戏性能至关重要。 8. **打包和部署**:了解如何将游戏打包成JAR文件,并通过jad文件进行部署到实际设备或模拟器。 ...

    J2ME开发文档(全)

    由于移动设备资源有限,J2ME应用的性能优化至关重要。这包括代码精简、内存管理以及电池寿命考虑。此外,了解如何在WTK模拟器和实际设备上调试J2ME程序也是开发者必须掌握的技能。 七、实战应用 文档可能还包括一些...

    J2ME游戏开发(第一版)

    8. **性能优化**:由于J2ME设备性能各异,开发者必须关注代码效率,避免内存泄漏,合理使用线程,并考虑设备特性如屏幕分辨率和处理器速度。 9. **调试与测试**:由于J2ME设备的多样性,游戏可能在不同设备上表现...

    开发j2me的手机模拟器

    J2ME的打包通常涉及将源代码编译为.class文件,然后用jad或jar文件打包,这些文件可以在模拟器或实际设备上运行。 在标签中提到了“最好的模拟器”和“开源”。这表明我们可能会讨论一些高质量且免费的J2ME模拟器...

    j2Me 实例 笔记源码

    10. **优化技巧**:J2ME应用程序需要考虑到设备的内存限制和性能,因此,代码优化非常重要。这可能涉及到减少对象创建,使用位运算而非浮点运算,以及最小化屏幕更新等。 通过深入研究这个源码包,开发者不仅可以...

    j2me 与jsp通信

    标题中的“j2me 与jsp通信”涉及的是在移动设备上使用Java 2 Micro Edition (J2ME)平台与服务器端的JavaServer Pages (JSP)进行数据交互的技术。J2ME通常用于开发功能手机和嵌入式系统的应用程序,而JSP则是Web开发...

Global site tag (gtag.js) - Google Analytics