治疗技术焦虑的方法就是学习!

代码调优(1)-字符串

Java程序性能调优 李新广 456℃ 0评论
      首先我们知道 ,String 是final 的不能被继承的, 且String 不是原始类型,底层为char数组,
那么在某种意义上我们说这种String 为不可变的。
    (1)常量池优化技术
当两个String对象拥有相同的值的时候。他们只引用常量池的同一个地址
例如:

 

(2)subString()的内存溢出
观看源码发现,返回了一个新的字符串对象 查看String 的构造函数
如果是原始字符内容很大,截取的字符串却很短,每次都通过偏移量来复制,它包含原生字符串的所有内容,将会极大浪费内存空间,这种典型的就是用空间换取生成字符串的速度。
例如:
运用代码sb1的方法就会发生内存泄露,大量的内存,GC不能及时回收。
(3)在性能敏感的条件下,使用执行效率更高的StringTokenizer 类分割字符串。事实上,使用indexof(int ch) 配合substring 往往性能更加好。
(4)高效率的charAt(int)方法
在上文提到,indexof(char ch),charAt 和其使用正好相反,效率上都是非常快的。
那么在性能敏感的的条件下,判断字符串是否结尾,和开始就可以这样写
反之endWith也是这样
(5)当然老生长谈的StringBuffer StringBuilder 就不再这里讲述了,这个是面试的常见问题,本系列文章以实用为主。

转载请注明:大道至简 » 代码调优(1)-字符串

喜欢 (1)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址