提高String及StringBuffer性能的技巧.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
提高String及StringBuffer性能的技巧

[翻译]提高String和StringBuffer性能的技巧  String和StringBuffer之概览   创建字符串的较佳途径   滞留字符串带来的优化   连接字符串时的优化技巧   借助StringBuffer的初始化过程的优化技巧   关键点 ? String和StringBuffer之概览   非可变对象一旦创建之后就不能再被改变,可变对象则可以在创建之后被改变。String对象是非可变对象,StringBuffer对象则是可变对象。为获得更佳的性能你需要根据实际情况小心谨慎地选择到底使用这两者中的某一个。下面的话题会作详细的阐述。(注意:这个章节假设读者已经具备Java的String和StringBuffer的相关基础知识。) ? 创建字符串的较佳途径 你可以按照以下方式创建字符串对象: 1. String s1 = hello;? ??? String s2 = hello;? 2. String s3 = new String(hello); ??? String s4 = new String(hello); ? 上面哪种方式会带来更好的性能呢?下面的代码片断用来测量二者之间的区别。 StringTest1.java package com.performance.string; /** This class shows the time taken for creation of ?*? String literals and String objects. ?*/ public class StringTest1 { public static void main(String[] args){ ??? // create String literals ??? long startTime = System.currentTimeMillis(); ??? for(int i=0;i50000;i++){ ??? String s1 = hello; ??? String s2 = hello; ??? } ??? long endTime = System.currentTimeMillis(); ??? System.out.println(Time taken for creation of String literals : ????????????????? + (endTime - startTime) + milli seconds ); ??? // create String objects using ‘new‘ keyword??????? ??? long startTime1 = System.currentTimeMillis(); ??? for(int i=0;i50000;i++){ ??? String s3 = new String(hello); ??? String s4 = new String(hello); ??? } ??? long endTime1 = System.currentTimeMillis(); ??? System.out.println(Time taken for creation of String objects : ????????????????? + (endTime1 - startTime1)+ milli seconds); ??? } } 这段代码的输出: Time taken for creation of String literals : 0 milli seconds Time taken for creation of String objects : 170 milli seconds ? JVM是怎样处理字符串的呢?   Java虚拟机会维护一个内部的滞留字符串对象的列表(唯一字符串的池)来避免在堆内存中产生重复的String对象。当JVM从class文件里加载字符串字面量并执行的时候,它会先检查一下当前的字符串是否已经存在于滞留字符串列表,如果已经存在,那就不会再创建一个新的String对象而是将引用指向已经存在的String对象,JVM会在内部为字符串字面量作这种检查,但并不会为通过new关键字创建的String对象作这种检查。当然你可以明确地使用Sern()方法强制JVM为通过new关键字创建的String对象作这样的检查。这样可以强制JVM检查内部列表而使用已有的String对象。   所以结论是,JVM会内在地为字符串字面量维护一些唯一的String对象,程序员不需要为字符串字面量而发愁,但是可能会被一些通过new关键字创建的String对象而困扰,不过他们可以使用i

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档