快速业务通道

J2ME循环与String优化设计 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19

J2ME循环与String优化设计

时间:2011-02-10

通常我们撰写循环时,习惯让计数变量从0 开始,然后累加。但是,只要做一点小小的更改,就可以让程序跑的更快,范例程序如下:

//PerfTest.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class PerfTest extends MIDlet { public PerfTest() { } public void startApp() { long start,end ; start = System.currentTimeMillis() ; for(int i=0 ; i < 9000000 ; i++) ; end = System.currentTimeMillis() ; System.out.println("Normal loop : "+ (end-start) + " milliseconds") ; start = System.currentTimeMillis() ; for(int i=8999999 ; i >= 0 ; i--) ; end = System.currentTimeMillis() ; System.out.println("Optimized loop : "+ (end-start) + " milliseconds") ; } public void pauseApp() { } public void destroyApp(boolean unconditional) { } }

执行结果:

Normal loop : 2046 milliseconds Optimized loop : 1563 milliseconds

从上述范例我们可以发现,跑900 万次,单单跑循环而以就相差约500 毫秒,将进1/4 的效能提升。

这个范例可以扩大到任何使用到比较运算符(>、>=、<、<=、!=)。之所以会有效能的提升,是因为如果任何数值要与0 比较,在底层都有对应较简单的指令可以对应,也因此加速了程序的执行。范例的第一段程序代码被编译成:

0 invokestatic #2 <Method long currentTimeMillis()> 3 lstore_1 4 iconst_0 5 istore 5 7 goto 13 10 iinc 5 1 13 iload 5 15 ldc #3 <Integer 9000000> 17 if_icmplt 10 20 invokestatic #2 <Method long currentTimeMillis()> 23 lstore_3 24 getstatic #4 <Field java.io.PrintStream out> 27 new #5 <Class java.lang.StringBuffer> 30 dup 31 invokespecial #6 <Method java.lang.StringBuffer()> 34 ldc #7 <String "Normal loop : "> 36 invokevirtual #8 <Method java.lang.StringBuffer append(java.lang.String)> 39 lload_3 40 lload_1 41 lsub 42 invokevirtual #9 <Method java.lang.StringBuffer append(long)> 45 ldc #10 <String " milliseconds"> 47 invokevirtual #8 <Method java.lang.StringBuffer append(java.lang.String)> 50 invokevirtual #11 <Method java.lang.String toString()> 53 invokevirtual #12 <Method void println(java.lang.String)>

J2ME循环与String优化设计(2)

时间:2011-02-10

而第二段程序代码被编译成

56 invokestatic #2 <Method long currentTimeMillis()> 59 lstore_1 60 ldc #13 <Integer 8999999> 62 istore 6 64 goto 70 67 iinc 6 -1 70 iload 6 72 ifgt 67 75 invokestatic #2 <Method long currentTimeMillis()> 78 lstore_3 79 getstatic #4 <Field java.io.PrintStream out> 82 new #5 <Class java.lang.StringBuffer> 85 dup 86 invokespecial #6 <Method java.lang.StringBuffer()> 89 ldc #14 <String "Optimized loop : "> 91 invokevirtual #8 <Method java.lang.StringBuffer append(java.lang.String)> 94 lload_3 95 lload_1 96 lsub 97 invokevirtual #9 <Method java.lang.StringBuffer append(long)> 100 ldc #10 <String " milliseconds"> 102 invokevirtual #8 <Method java.lang.StringBuffer append(java.lang.Strin

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号