提高string和stringbuffer性能的技巧

提高string和stringbuffer性能的技巧

ID:34469963

大小:32.81 KB

页数:9页

时间:2019-03-06

提高string和stringbuffer性能的技巧_第1页
提高string和stringbuffer性能的技巧_第2页
提高string和stringbuffer性能的技巧_第3页
提高string和stringbuffer性能的技巧_第4页
提高string和stringbuffer性能的技巧_第5页
资源描述:

《提高string和stringbuffer性能的技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、[翻译]提高String和StringBuffer性能的技巧 String和StringBuffer之概览  创建字符串的较佳途径  滞留字符串带来的优化  连接字符串时的优化技巧  借助StringBuffer的初始化过程的优化技巧  关键点 String和StringBuffer之概览  非可变对象一旦创建之后就不能再被改变,可变对象则可以在创建之后被改变。String对象是非可变对象,StringBuffer对象则是可变对象。为获得更佳的性能你需要根据实际情况小心谨慎地选择到底使用这两者中的某一个。下面的话题会作详细的阐述。(注意:这个章节假设读者已经具备Java的String

2、和StringBuffer的相关基础知识。) 创建字符串的较佳途径你可以按照以下方式创建字符串对象:1.Strings1="hello";    Strings2="hello"; 2.Strings3=newString("hello");   Strings4=newString("hello"); 上面哪种方式会带来更好的性能呢?下面的代码片断用来测量二者之间的区别。StringTest1.javapackagecom.performance.string;/**Thisclassshowsthetimetakenforcreationof * Stringliteralsan

3、dStringobjects. */publicclassStringTest1{publicstaticvoidmain(String[]args){   //createStringliterals   longstartTime=System.currentTimeMillis();   for(inti=0;i<50000;i++){   Strings1="hello";   Strings2="hello";   }   longendTime=System.currentTimeMillis();   System.out.println("Timetakenforcr

4、eationofStringliterals:"                 +(endTime-startTime)+"milliseconds");   //createStringobjectsusing‘new‘keyword          longstartTime1=System.currentTimeMillis();   for(inti=0;i<50000;i++){   Strings3=newString("hello");   Strings4=newString("hello");   }   longendTime1=System.currentT

5、imeMillis();   System.out.println("TimetakenforcreationofStringobjects:"                 +(endTime1-startTime1)+"milliseconds");   }}这段代码的输出:TimetakenforcreationofStringliterals:0millisecondsTimetakenforcreationofStringobjects:170milliseconds JVM是怎样处理字符串的呢?  Java虚拟机会维护一个内部的滞留字符串对象的列表(唯一字符串的池)来避

6、免在堆内存中产生重复的String对象。当JVM从class文件里加载字符串字面量并执行的时候,它会先检查一下当前的字符串是否已经存在于滞留字符串列表,如果已经存在,那就不会再创建一个新的String对象而是将引用指向已经存在的String对象,JVM会在内部为字符串字面量作这种检查,但并不会为通过new关键字创建的String对象作这种检查。当然你可以明确地使用String.intern()方法强制JVM为通过new关键字创建的String对象作这样的检查。这样可以强制JVM检查内部列表而使用已有的String对象。  所以结论是,JVM会内在地为字符串字面量维护一些唯一的Stri

7、ng对象,程序员不需要为字符串字面量而发愁,但是可能会被一些通过new关键字创建的String对象而困扰,不过他们可以使用intern()方法来避免在堆内存上创建重复的String对象来改善Java的运行性能。下一小节会向大家展示更多的信息。 下图展示了未使用intern()方法来创建字符串的情况。   你可以自己使用==操作符和String.equals()方法来编码测试上面提到的区别。==操作符会返回true如果一些引用指向一个相同的对象但不会判断St

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。