Java字符串性能优化

简介:

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

建议:创建指定初始容量的StringBuilder(非线程安全,优先)或StringBuffer(线程安全)对象,使用append方法连接字符串。
禁止:使用多个“+”号连接String。
原因:由于String为不可变类,每次使用“+”号连接两个String对象,结果会产生一个新的String对象;多次使用“+”号连接中间结果会产生很多无用的String对象,占用过多内存,加重GC负担。
同时StringBuilder/StringBuffer内部使用一个字符数组存储字符,如果未设置初始容量,该字符数组默认大小为16,如果字符数组满则会扩容(即建一个更大的字符数组,并将原有的数组中的字符复制到新数组,并丢弃旧数组)。如果字符数组多次扩容,则会产生很多无用的中间字符数组,以及多次无意义的字符拷贝,性能低下

2、拆分字符串,使用Apache
Common包的StringUitls类的split()方法替代String类的split()方法,根据分隔符将字符串拆分成字符串数组

建议:使用Apache Common包的StringUitls类的split()方法拆分字符串。
禁止: String类的split()方法。
原因:String类的split()方法接受的分隔符为正则表达式,用正则表达式匹配效率比较低。而Apache Common包的StringUitls类的split()方法接受的分隔符为普通字符串,使用字符串查找匹配效率较高。
正确示例:

 StringUitls.split(“a||b||c”, “||”)

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

建议:使用基本类型和String常量
杜绝:尽量避免创建基本类型包装对象和String对象
原因:虽然包装类型和基本类型在使用过程中是可以相互转换,但它们两者所产生的内存区域是完全不同的。基本类型数据产生和处理都在栈中处理,包装类型是对象,是在堆中产生实例。
String常量在JVM采用常量池,代码中不同地方出现的相同String常量实际上是同一个对象;而每次创建String对象都是在堆中产生一个新的实例。
注:实际编程中,经常存在基本类型和包装类型的转换,如果无法避免和使用基本类型代替,则需要尽量减少转换的次数。
正确示例:

String str = “aaaa”
目录
相关文章
|
11天前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
89 60
|
1天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
14 6
|
9天前
|
Java 数据库连接 数据库
Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销
本文深入探讨了Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销,显著提升了系统的响应速度和吞吐量。文章介绍了连接池的工作原理,并以HikariCP为例,展示了如何在Java应用中使用连接池。通过合理配置和优化,连接池技术能够有效提升应用性能。
24 1
|
15天前
|
存储 算法 Java
Java虚拟机(JVM)的内存管理与性能优化
本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
|
16天前
|
缓存 算法 Java
Java 中常见的性能优化
【10月更文挑战第19天】Java 性能优化是一个复杂而又重要的课题,需要我们在实践中不断积累经验,掌握各种优化技巧,并结合具体情况灵活运用。通过持续的优化努力,我们可以让 Java 程序更加高效、稳定地运行,为用户提供更好的使用体验。你在性能优化方面还有哪些独特的见解或经验呢?欢迎与我分享,让我们一起在性能优化的道路上不断探索和进步。
37 3
|
28天前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
39 15
|
1月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
44 4
|
2月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
49 3
|
2月前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
16 2
|
2月前
|
存储 移动开发 Java
java核心之字符串与编码
java核心之字符串与编码
20 2