欢迎来到天天文库
浏览记录
ID:34469963
大小:32.81 KB
页数:9页
时间:2019-03-06
《提高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
此文档下载收益归作者所有