快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
g)> 105 invokevirtual #11 <Method java.lang.String toString()> 108 invokevirtual #12 <Method void println(java.lang.String)>

所以速度加快了。

String 的最佳化

通常我们要处理字符串时,第一个想到的就是String 类别,范例如下:

//StringBufferTest.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class StringBufferTest extends MIDlet { public StringBufferTest() { } public void startApp() { Runtime rt = Runtime.getRuntime() ; long diffstart = rt.totalMemory()-rt.freeMemory(); System.out.println("Memory used Start:" + diffstart) ; //注意,底下的程序代码没有任何意义,纯粹要展示String 有多耗内存 String sum = "" ; for(int i=0 ; i< 5000 ; i++) { sum = sum + "+" + i ; } long diffend = rt.totalMemory()-rt.freeMemory(); System.out.println("Memory used End:" + diffend) ; System.out.println("Memory used after operation:" + (diffend-diffstart)) ; } public void pauseApp() { } public void destroyApp(boolean unconditional) { } }

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

时间:2011-02-10

执行结果:

Memory used Start:28564 Memory used End:259864 Memory used after operation:231300

在此范例程序中,我们使用Runtime 类别的totoalMemory()来取得系统所有的内存大小,使用freeMemory()来取得可用内存的大小,两者相减之后约略是中间程序代码执行时所占用的内存大小。我们可以发现,循环执行500 次,耗掉了约231300 byte 的内存。如果我们把String 用StringBuffer 来替代:

//StringBufferTest.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class StringBufferTest extends MIDlet { public StringBufferTest() { } public void startApp() { Runtime rt = Runtime.getRuntime() ; long diffstart = rt.totalMemory()-rt.freeMemory(); System.out.println("Memory used Start:" + diffstart) ; //注意,底下的程序代码没有任何意义,纯粹要展示StringBuffer StringBuffer sum = new StringBuffer(""); for(int i=0 ; i< 5000 ; i++) { sum = sum.append("+").append(i) ; } long diffend = rt.totalMemory()-rt.freeMemory(); System.out.println("Memory used End:" + diffend) ; System.out.println("Memory used after operation:" + (diffend-diffstart)) ; } public void pauseApp() { } public void destroyApp(boolean unconditional) { } }

执行结果:

Memory used Start:28548 Memory used End:160848 Memory used after operation:132300

我们发现,改用StringBuffer 之后,循环同样执行500 次,,一样效果的程序代码,但内存只耗掉了132300 byte 的内存。少了将近一倍,这告诉我们,虽然StringBuffer 无法完全取代,但是如果可以的话,尽量使用StringBuffer。

之所以有节省内存的效果,是因为String 对象的设计采用了immutable 这种设计模式(Design Pattern),这是为了安全性的考量。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号