博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java性能优化之字符串
阅读量:4558 次
发布时间:2019-06-08

本文共 1204 字,大约阅读时间需要 4 分钟。

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

读者根据实际自己选取,一提高效率。

 

转载于:https://www.cnblogs.com/kimoyoyo21/p/4792915.html

你可能感兴趣的文章
关于Java中重载的若干问题
查看>>
Java中start和run方法的区别
查看>>
二叉树_非递归先中后序_递归非递归求深度
查看>>
20181227 新的目标
查看>>
HDFS写流程
查看>>
生产环境服务器环境搭建+ 项目发布
查看>>
js按条件分类json数组,并合计同组数据(一维转换为二维)
查看>>
Exp6 信息搜集与漏洞扫描
查看>>
redis4安装
查看>>
使用命令wsimport构建WebService客户端[转]
查看>>
第八遍:链接详解
查看>>
Qt5.5 使用smtp发邮件的各种坑
查看>>
js奇葩错误 字符串传递问题
查看>>
人之初,性本恶
查看>>
springboot 端口号
查看>>
使用AChartEngine画动态曲线图
查看>>
安卓项目五子棋代码详解(四)
查看>>
urllib 学习一
查看>>
bzoj4196 [Noi2015]软件包管理器——树链剖分
查看>>
kafka源码阅读环境搭建
查看>>