`
univasity
  • 浏览: 809746 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[资料]根据J2ME(MIDP)虚拟机对程序编写的优化方式

    博客分类:
  • J2me
阅读更多

1、关于虚拟机
我认为,目前客户端虚拟机技术,应该说是发展到一个转折点,未来可能会出现重大的技术突破。目前无论是Java还是.Net基本上采用的都是分代式垃圾回收和分支预测JIT技术。

因此目前这两个虚拟机的性能相差不是很大,因此对于程序的优化,基本上真对这两种技术来进行。

 

关于分代式垃圾回收
分代式垃圾回收技术应该是目前客户端虚拟机垃圾回收技术的主流,就是说增加对寿命短对象的收集,而减少对长寿命对象的收集。这里使用术语第一代和第二代的术语来描述。

 

第一代应当说是程序新分配的内存,从统计数据来看,对象越年轻,被回收的可能性就越大,因此,对第一代的垃圾回收进行的频繁一些。而一旦进行了第一代的垃圾回收,未被回收的对象将会成为第二代对象。对于第二代对象的回收,由于它的生命期更长,因此在到达第二代对象空间阈值(临界点)的时候并不会收集,这样就减少了回收的次数。防止垃

圾回收带来的系统停顿。

 

 关于分支预测JIT技术
在虚拟机中已经被证明能极大地加快程序速度,而目前基本上采用的是带有分支预测技术的JIT编译器,因此越被频繁执行的语句,就越有可能被JIT编译器编译,从而加快程序的

速度。但是目前的对J2ME虚拟机来说,性能有限,因此JIT的应用的也有限,在程序写作上,应当帮助进行JIT编译。

 

2、关于J2ME的虚拟机
J2ME虚拟机最严重影响程序性能的就是进行垃圾回收操作,一旦进行垃圾回收,程序的主线程一般会暂时挂起,以方便进行垃圾回收操作。在程序上的表现就是程序出现暂时的停顿,这将极大地影响用户的体验。因此必须尽量减少垃圾回收进行的次数,尽最大努力控制垃圾回收的执行,尽量减少垃圾回收执行的时间。

 

J2ME虚拟机中JIT技术的应用,目前我没有发现有显著的文章来进行描述,由于JIT技术需要实时编译并且耗费内存较多,因此,我认为MIDP1.0中并没有采用JIT技术。而MIDP2.0中有可能采用JIT技术,但是J2ME的JIT技术与J2SE的性能应该不是一个数量级上的,由于CPU性能有限,注定无法做复杂的JIT编译,而且由于JIT耗费内存,也注定无法对代码进行大

规模的JIT编译。

 

3、J2ME(MIDP)对于这两种技术的优化
针对垃圾回收的优化垃圾回收优化的核心思想就是减少垃圾回收的次数,增加垃圾回收中资源的回收量。

 

先说垃圾回收次数的优化,在上文中已经说明,分代式垃圾回收,第一代的垃圾回收进行的次数较频繁,因此垃圾回收首先针对第一代垃圾回收,就是说应该避免在成员函数中产生新的对象。

 

这里在书中有明显的应用,在滚屏游戏的设计中,需要进行矩形的判断,这里采用的方式都是定义的到类中的矩形,而不是定义函数矩形,在碰撞判断中调用的矩形都是在类的构造函数中生成的,并不在函数中生成,由于需要频繁调用碰撞检测,因此如果定义在函数中将会增加垃圾回收的次数。具体情况如下:
class Sprite
{
public Rect rect1 = new Rect();
public Rect rect2 = new Rect();
bool checkCollision()
{
//位置判断后,进行初始化,但是不分配产生新的对象
rect1.x,rect1.y,rect1.dx,ect1.dy
rect2.x,rect2.y,rect2.dx,rect2.dy
}
}
这样就显著减少了对象的生成,注意这里还有一个优化的地方,基本上每次判断,dx,dy值是固定的,因此在构造函数中应当初始化dx,dy,这样将会减少初始化。因此书中的程序中有很多看起来不应当定义为类程序的变量,都被定义为类成员,这极大地减少了垃圾回收的次数。

 

而对于二代的垃圾回收,就是在程序中不要随时把无用的资源置为null,这样可能会激发二代回收。

 

而对于尽可能增加垃圾回收的资源回收量,是调用显示垃圾回收,在进行大规模的资源更换的时候。这个优化技术书中没有说明,但与程序源代码中有体现。对于类程序对象,不要无故置为null,而是在资源更换的时候,一般来说这个时候是更换关卡的时候,此时应当把上关卡中不再使用的资源全部置为null,然后显式调用垃圾回收。再栽入新的资源,这个时候新的资源能够顺利栽入,旧的资源也能够顺利回收。而由于关卡切换,进行稍微的等待也是可行的,不会影响用户体验。

 

针对JIT编译的优化JIT编译的优化就是用户模拟JIT编译器来进行程序编译的优化,对于频繁执行的地方,尽量优化。对于程序中的分支判断,要把经常调用的分支写到判断前面。

 

而在我前面的文章中提到的关于成员函数使用get和set,这个在JIT编译器中基本上是被优化掉的,没有多少意义。如果不是太频繁,也不用全部应用破坏程序结构,只把最频繁的进行优化即可。

 

这里还有一个优化的地方,对于特别频繁的执行语句,如下的取得数据成员的方式:
a.b,如果是int型,最好使用一个临时变量
int temp = a.b;
这将减少类程序的取得时间,虽然只有几个时钟周期,但是对于特别频繁的调用和复杂算法,性能还是有一定的提升。

 

4、总结
这里提到的优化措施每一处对程序的影响都很小,但是积少成多,水滴石穿,注意的地方多了,就会对程序性能产生影响,并且很多优化是全局性的,这在程序的架构设计之初就应该考虑好的。

 

转自:http://www.j2medev.com/bbs/dispbbs.asp?boardID=11&ID=12188&page=1

分享到:
评论

相关推荐

    j2me_cldc-1_0_4-src-winunix.zip_arm java_j2me_j2me 虚拟机_j2me_cldc

    这个压缩包提供了一种移植到ARM平台的J2ME CLDC 1.0.4虚拟机的源代码,对于开发者来说,这是一个宝贵的资源,他们可以借此深入理解J2ME虚拟机的工作原理,进行自定义修改,以适应特定设备的需求,或进行性能优化。...

    基于J2ME MIDP的移动通信技术研究.pdf

    开发J2ME MIDP应用程序,开发人员需要一个集成开发环境(IDE),如NetBeans或Eclipse,它们提供了编写、编译和测试J2ME应用的工具。开发过程包括编写源代码,利用MIDP提供的类库进行网络通信、用户界面设计等,然后...

    Java移动通信程序设计(J2ME MIDP)范例

    Java移动通信程序设计,主要基于Java Micro Edition (J2ME) 的Mobile Information Device Profile (MIDP),是为小型设备和移动通信设备如手机、PDA等开发应用程序的关键技术。J2ME MIDP提供了丰富的功能,使开发者...

    Java移动通信程序设计-J2ME MIDP

    Java移动通信程序设计-J2ME MIDP 是一个专注于使用Java Micro Edition (J2ME)的Mobile Information Device Profile (MIDP)开发移动应用程序的主题。在本文中,我们将深入探讨MIDP的重要概念、架构以及如何利用它来...

    J2ME学习资料打包下载

    1. **KJava虚拟机**:J2ME应用程序运行在特定的虚拟机上,称为KVM(K Java Virtual Machine),它是为低内存设备优化的。理解KVM的工作原理和限制对优化代码至关重要。 2. **Wireless Toolkit**:开发者通常使用Sun...

    基于J2ME平台的手机应用程序研究与开发

    开发J2ME应用程序,常用的工具有NetBeans、Eclipse等集成开发环境(IDEs),它们通常包含J2ME项目模板、模拟器和调试工具,便于开发者进行代码编写和测试。此外,还有专门的J2ME开发工具,如Sun Microsystems的...

    J2ME手机地址薄程序

    7. **异常处理**:在编写J2ME应用时,需确保正确处理可能出现的异常,以确保程序的健壮性。 8. **优化技巧**:由于资源限制,J2ME应用程序需要特别注意代码效率和内存使用。这包括最小化对象创建、优化循环结构以及...

    J2ME程序设计实例教程实例源码

    MIDP(Mobile Information Device Profile)是J2ME中用于开发移动设备应用程序的标准,它包含了用户界面组件、网络连接和数据存储等功能。CLDC(Connected Limited Device Configuration)则是MIDP的基础,提供了一...

    Core J2ME Technology & MIDP

    总之,《核心J2ME技术与MIDP》这本书不仅提供了对J2ME平台的深入理解,还指导读者如何利用MIDP构建强大而高效的无线应用程序。对于那些希望进入或深化他们在移动应用开发领域的知识的开发者来说,这本书是一个宝贵的...

    4 份j2me资料,据我学习j2me经验,总结一些必读的书.

    这本书可能详细介绍了J2ME的开发过程,通过一系列逐步指导的实例,让读者熟悉开发环境的搭建、代码编写、调试和优化。每个步骤都旨在增强读者的实际操作技能,并帮助他们建立起J2ME编程的扎实基础。 3. **J2ME Game...

    j2me的全套资料j2me的

    在J2ME中,应用程序通常使用Java编写,并遵循MIDP API。MIDP包含用户界面组件(如ChoiceGroup、TextBox和Form)、网络连接能力(如HttpConnection和StreamConnection)以及数据存储机制(如RecordStore)。开发者...

    J2ME开发 J2ME开发 J2ME开发

    2. **MIDP (Mobile Information Device Profile)**:MIDP是J2ME中最常见的框架,用于开发移动应用程序,包括用户界面组件和网络通信功能。 3. **CLDC (Connected Limited Device Configuration)**:这是J2ME的基础...

    J2ME一些资料

    10. **安全性**:J2ME有其特有的安全模型,通过权限表(Permission Table)控制应用程序的访问权限,防止恶意代码对设备造成损害。 通过学习和掌握这些核心概念,开发者能够创建出适应各种J2ME设备的应用程序。...

    j2me课件.rar

    3. **J2ME开发环境**:通常,开发者会使用如NetBeans或Eclipse这样的集成开发环境(IDE)来编写J2ME程序,这些IDE提供了专为J2ME优化的项目管理、编译和调试工具。 4. **KVM与CDC**:J2ME的虚拟机有KVM(K Virtual ...

    j2me自主学习资料

    MIDlets是J2ME中的应用程序,它们运行在MIDP环境中。 4. **MIDP用户界面** MIDP提供了一个简单的用户界面库,包括 LCDUI(Limited Connected Device User Interface),它包括基本的组件如 Display, Form, String...

    J2ME程序开发全方位基础讲解汇总

    J2ME中的数据存储通常通过Record Management System (RMS) 实现,这是一种简单的键值对存储方式。开发者可以使用RecordStore类来读写数据。 8. **网络编程** MIDP提供了HttpConnection类进行HTTP通信,可以实现...

    Core J2ME Technology & MIDP.pdf

    ### 核心知识点:J2ME与MIDP技术 #### 一、J2ME概述 J2ME(Java 2 Platform, Micro Edition)是Sun Microsystems为嵌入式设备和移动设备开发的一种Java平台标准。它针对的是内存有限、显示能力和处理能力较低的...

    郭克华J2me课件与代码

    - **MIDP**:MIDP(Mobile Information Device Profile)是J2ME用于开发移动设备应用程序的主要框架,提供了用户界面组件、网络连接和数据存储等功能。 - **CLDC**:Connected Limited Device Configuration是J2ME...

    J2ME移动软件程序设计

    《J2ME移动软件程序设计》-卢军-电子教案-6931可能是卢军教授关于这个主题的教材或教程资料,涵盖了J2ME的深入讲解和实践指导,可以帮助读者全面理解J2ME的原理和开发技巧,进一步提升在移动软件开发中的专业技能。...

Global site tag (gtag.js) - Google Analytics