JAVA编码优化|String

https://editor.csdn.net/md/?articleId=108047958
https://editor.csdn.net/md/?articleId=108048176
这两篇文章已经知道在开发未完成前不做性能调优,但是需要做的就是代码、算法和设计模式相关的优化。接下来就是要开始做开发工程中的优化点,这篇文章要说的就是字符串String的优化点。

废话不多说,show time
What?

  1. String为什么是常量?
    第一是为了不被串改;第二是为了让hashCode码不变;根本目的就是可以使用常量池,对于重复的字符串可以重复利用。

  2. String的不同初始化方式有什么区别?

String a= "abc"; 
String b = new String("abc");

首先会在常量池中创建"abc"字符串,然后a的指针指向常量池中的字符串“abc”,接着在堆里面创建一个String对象,这个对象里面包含一个指针指向常量池中的字符串"abc",最后b指针子项堆中的String对象。
他们的区别就是是否在堆中多创建一个对象。

HOW?

  1. 做长字符串拼接时,拼接过程中有变量时,显示使用 StringBuilder,以提高字符串的拼接性。
  2. 使用 intern 方法,让变量字符串对象重复使用常量池中相同值的对象,进而节约内存。
  3. 慎重使用 Split() 方法,Split() 方法使用了正则表达式实现了其强大的分割功能,而正则表达式的性能是非常不稳定的,使用不恰当会引起回溯问题。

正则表达式如何优化

  1. 少用贪婪模式,多用独占模式:独占模式就是在字符后面加一个“+”,比如ab{1,3}c 这个是贪婪模式,ab{1,3}+c就是独占模式。好处就是如果结果不匹配,结束匹配,不会发生回溯问题。
  2. 减少分支选择分支选择类型“(X|Y|Z)”的正则表达式会降低性能,我们在开发的时候要尽量减少使用。
    如果一定要用可以采取以下几个方式进行优化:
    1、把常用选项放在最前面:比如Y最常用,所以变为(Y|X|Z)
    2、提取共有的:比如(abcd|abef)变为 ab(cd|ef)
    3、如果是简单的分支选择类型,我们可以用三次 index 代替“(X|Y|Z)”
  3. 减少捕获嵌套,一般一个 () 就是一个捕获组。如果表达式是(?:exp)组成,则为非捕获主。

参考资料:
1、《JAVA性能调优实战》作者:刘超
2、https://www.cnblogs.com/aaronjs/archive/2012/06/30/2570805.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值