字符串优化思考

前言: 

最近在学习Java性能调优,看到相关字符串优化的文章,阅读之后有一些思考,认为还是比较重要的,这里在这记录下

1、字符串拼接

简单的字符串拼接,如 “a" +"b",这种虚拟机会自行使用Stringbuilder 来进行优化,但在循环中,还是需要显示的声明,因为目前在循环里边,虚拟机是重复构建 Stringbuilder 的

提一点,与Stringbuilder 相对的是StringBuffer 这线程安全的字符串拼接器,但就目前来说 StringBuffer 基本就没见过真正使用的用途,使用这玩意仅仅是保证jvm不抛出异常顺利的往下执行而已,它可不保证逻辑正确和调用顺序正确。而真正需要线程安全还是需要锁来进行处理,都用锁了还用这玩意干啥呢?

2、合理使用 intern 方法

合理使用 intern(),在每次赋值的时候使用 String 的 intern 方法,如果常量池中有相同值,就会重复使用该对象,返回对象引用,这样一开始的对象就可以被回收掉。这种情况适用于存在大量重复字符串。

这部分涉及到了Java 的内存区域了,目前在1.7之后字符串常量池已经归到堆里边了。总而言之,intern 方法就是返回在字符串常量池中字符串的引用。来张图吧,如图1所示:

3、合理使用正则表达式

正则表达式的性能是非常不稳定的,使用不恰当会引起回溯问题,很可能导致 CPU 居高不下。而在String.split方法里边,就使用了正则表达式(字符串长度大于1),这边推荐使用 String.indexof,如果不满足需要,还是可以用的,但需要关注是否会产生回溯这问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值