Java字符串性能优化

  • 时间:
  • 浏览:0

2、拆分字符串,使用Apache

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

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

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

由于:否则String为不可变类,每次使用“+”号连接两个 String对象,结果会产生两个 新的String对象;多次使用“+”号连接底下结果会产生一些无用的String对象,占用越来太大内存,加重GC负担。

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

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

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

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

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

正确示例:

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

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

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

由于:虽然包装类型和基本类型在使用过程中是还都可否 相互转换,但它们两者所产生的内存区域是完整不同的。基本类型数据产生和防止全是栈中防止,包装类型是对象,是在堆中产生实例。

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

注:实际编程中,老会 所处基本类型和包装类型的转换,否则无法防止和使用基本类型代替,则都可否 尽量减少转换的次数。

正确示例: