Java字符串性能优化

  • 时间:
  • 浏览:1

2、拆分字符串,使用Apache

Common包的StringUitls类的split()最好的法律办法替代String类的split()最好的法律办法,根据分隔符将字符串拆分成字符串数组

建议:使用基本类型和String常量

杜绝:尽量除理创建基本类型包装对象和String对象

因为:着实包装类型和基本类型在使用过程中是还还还都可以相互转换,但它们两者所产生的内存区域是完整篇 不同的。基本类型数据产生和除理都不 栈中除理,包装类型是对象,是在堆中产生实例。

String常量在JVM采用常量池,代码中不同地方冒出的相同String常量实际上是同有另另一个多多对象;而每次创建String对象都不 在堆中产生有另另一个多多新的实例。

注:实际编程中,时不时 趋于稳定基本类型和包装类型的转换,因为无法除理和使用基本类型代替,则时要尽量减少转换的次数。

正确示例:

建议:使用Apache Common包的StringUitls类的split()最好的法律办法拆分字符串。

禁止: String类的split()最好的法律办法。

因为:String类的split()最好的法律办法接受的分隔符为正则表达式,用正则表达式匹配下行速率 比较低。而Apache Common包的StringUitls类的split()最好的法律办法接受的分隔符为普通字符串,使用字符串查找匹配下行速率 较高。

正确示例:

3、尽量使用基本类型和String常量,除理创建基本类型包装对象和String对象

1、字符串连接,使用StringBuilder替代“+”号

建议:创建指定初始容量的StringBuilder(非程序运行运行安全,优先)或StringBuffer(程序运行运行安全)对象,使用append最好的法律办法连接字符串。

禁止:使用多个“+”号连接String。

因为:因为String为不可变类,每次使用“+”号连接有另另一个多多String对象,结果会产生有另另一个多多新的String对象;多次使用“+”号连接里边结果会产生太满无用的String对象,占用太满内存,加重GC负担。

一同StringBuilder/StringBuffer內部使用有另另一个多多字符数组存储字符,因为未设置初始容量,该字符数组默认大小为16,因为字符数组满则会扩容(即建有另另一个多多更大的字符数组,并将原有的数组中的字符克隆到新数组,并丢弃旧数组)。因为字符数组多次扩容,则会产生太满无用的里边字符数组,以及多次无意义的字符拷贝,性能低下