标签:
Java程序性能优化之代码优化
字符串部分:
关于这一部分我们需要了解String StringBuffer StringBulider
String是一个不可变字符序列,针对常量池优化,类是final的
String的不变性是指字符串对象一旦创建便不可改变。
常量池的优化是指若两个字符串拥有相同的字符串序列,则在常量池只有一份拷贝。
String类是final的则意味着不能对String类进行继承或者修改
String实际上是由三部分组成char数组和偏移量以及字符串长度组成 实际上字符subString方法就是由这三部分进行截取
我们以subString(beginIndex,endIndex)为例 实际上当beginIndex==0和endIndex==原字符串长度时会返回原字符串 但是觉大多数情况下这是不会发生的。当原字符串很长时,但要截取的字符串却很短时,方法会根据偏移量截取并返回字符串但是此时却是对原字符串进行了一份拷贝并占据了内存空间。这是典型的以空间换时间的思想,但却很容易造成内存溢出
启示:所以说我们在使用subString()函数时要使用new String(str.subString());来释放返回字符串的引用,避免照成内存泄露
有关String方法造成内存泄露的方法还有不少,使用时要特别注意
字符串效率分割的方法有三种 一种是spilt()方法 一种是使用StringTokenizer类 前者效用较低在系统频繁使用是不适合的
还可以自己写方法进行分割
这种方法是使用indexOf()和subString 函数先找到分割符的位置,然后再将剩下的字符串作为临时字符串开始下一一截取
实践证明方法三效率是最高的 自己可以下测试脚本进行测试
关于String我们要了解的是charAt()方法是效率很高的,在使用startWith()方法时可以用charAt()方法代替代
String性能优化 我们暂时就讲这些
下面我们来比较下StringBuffer和StringBuilder
StringBuffer使用了锁同步而StringBuilder却没有因此StringBuffer线程安全但StringBuilder效率更高,应该结合具体情况来使用StringBuffer 和StringBuilder
了解到上面的 我们需要了解的是
String常量的累加的效率实际是较高的因为在编译时编译器对累加做了优化处理,此时高于StringBuilder的append操作,但String变量相加时,与StringBuilder的append方法操作相差无几。
因为变量相加实际也是使用StringBuilder进行append
读者根据实际自己选取,一提高效率。
标签:
原文地址:http://www.cnblogs.com/kimoyoyo21/p/4792915.html