9 个 Java 性能调优技巧,YYDS!

本文介绍了在Java编程中,如何通过使用StringBuilder高效连接字符串,避免使用包装类以提高性能,以及注意大整数和小数的内存消耗。此外,还提到了使用ApacheCommonsStringUtils.Replace替代String.replace和合理使用缓存资源如数据库连接的重要性。
摘要由CSDN通过智能技术生成

5. 使用 StringBuilder 以编程方式连接字符串

在 Java 中有很多不同的选项来连接字符串。例如,你可以使用简单的 + 或 + = ,以及老的 StringBuffer 或 StringBuilder 。

那么,你应该选择哪种方法呢?

答案取决于连接字符串的代码。如果你是以编程方式将新内容添加到字符串中,例如在for循环中,则应使用 StringBuilder 。它很易于使用,并提供比 StringBuffer 更好的性能。但请记住,与 StringBuffer 相比, StringBuilder 不是线程安全的,可能并不适用于所有情况。

你只需要实例化一个新的 StringBuilder 并调用append方法来向String中添加一个新的部分。在你添加完了所有的部分后,你可以调用toString()方法来检索已连接的字符串。

下面的代码片段展示了一个简单的例子。在每次迭代期间,该循环将 i 转换为一个 String ,并将其与空格一起添加到 StringBuilder sb 中。所以,最后,这段代码在日志文件中写入 “This is a test0 1 2 3 4 5 6 7 8 9” 。

StringBuilder sb = new StringBuilder(“This is a test”);for (int i=0; i<10; i++) {

sb.append(i);

sb.append(” “);

}

log.info(sb.toString());

正如你在代码片段中看到的。我们可以为字符串的第一个元素提供到构造函数中。这会创建一个 StringBuilder ,其中包含了你所提供的字符串以及 16 个额外字符的容量。当你向 StringBuilder 中添加更多字符时,你的 JVM 将动态的增加 StringBuilder 的大小。

如果你已经知道字符串将包含多少个字符,则可以将该数字提供给不同的构造方法以实例化具有指定容量的 StringBuilder 。这进一步提高了效率,因为它不需要动态扩展其容量。

如果您正在学习Spring Boot,推荐一个连载多年还在继续更新的免费教程:http://blog.didispace.com/spring-boot-learning-2x/

6. 尽可能使用基本类型

避免任何开销并提高应用程序性能的另一种简便快速的方法是使用基本类型而不是其包装类。所以,最好使用 int 而不是 Integer ,是 double 而不是 Double 。这将使得你的 JVM 将值存储在堆栈而不是堆中,以减少内存消耗,并更有效地处理它。

7. 尽量避免大整数和小数

由于我们已经在讨论数据类型,所以我们也应该快速浏览大整数和小数。尤其是后者因其精确性而受欢迎。但这是有代价的。大整数和小数比一个简单的 long 型或 double 型需要更多的内存,并会显著减慢所有的运算。

所以,如果你需要额外的精度,或者如果你的数字超出一个较长的范围,最好要三思。这可能是你需要更改并解决性能问题的唯一方法,尤其是在实现数学算法时。

8. 使用 Apache Commons StringUtils.Replace 而不是 String.replace

一般来说,String.replace 方法可以正常工作,并且效率很高,尤其是在你使用 Java 9 的情况下。但是,如果你的应用程序需要大量的替换操作,并且没有更新到最新的 Java 版本,那么检查更快和更有效的替代品依然是有必要的。

有一种候选方案是 Apache Commons Lang 的 StringUtils.replace 方法。正如 Lukas Eder 在他最近的一篇博客文章中所描述的,它远远胜过了 Java 8 的 String.replace 方法。

而且它只需要很小的改动。你只需要将 Apache Commons Lang 项目的 Maven 依赖项添加到你的应用程序的 pom.xml 中,并将 String.replacemethod 的所有调用替换为 StringUtils.replace 方法。

// replace this

test.replace(“test”, “simple test”);

// with this

StringUtils.replace(test, “test”, “simple test”);

9. 昂贵的缓存资源,如数据库连接

缓存是避免重复执行昂贵或常用代码片段的流行解决方案。总的思路很简单:重复使用这些资源比创建一个新的资源更划算。

一个典型的例子是缓存池中的数据库连接。新连接的创建需要时间,如果你重用现有连接,则可以避免这种情况。

你也可以在 Java 语言源码中找到其他的例子。例如,在 Integer 类中的 valueOf 方法缓存了介于 -128 到 127 之间的值。你可能会说创建一个新的 Integer 并不是太昂贵,但是由于它经常被使用,因此缓存最常用的值也可以提供性能优势。

但是,当你考虑使用缓存时,请记住缓存实现也会产生开销。你需要花费额外的内存来储存可重复使用的资源,因此你可能需要管理你的缓存以使资源可访问,并删除过期的资源。

所以,在开始缓存任何资源之前,请确保它们是经常使用的,以超过缓存实现的开销(代价)。

总结

正如你所看到的,有时不需要太多的工作就可以提高你的应用程序的性能。本文中的大部分建议只需要稍作努力就可以将它们应用于你的代码中。

但还是那句话,最重要的还是那些与是什么编程语言无关的技巧:

  • 在你知道其必要性之前不要进行优化

  • 使用分析器(profiler)来查找真正的瓶

  • 优先处理最大的瓶颈

往期推荐

六成大学生认为自己毕业10年内会年入百万!网友:知乎上多了,没被社会毒打过吧!

缓存核心知识小抄,面试必备,赶紧收藏!

Java 17正式发布, Oracle宣布免费提供!“版本任你发,我用Java 8”或成历史?

最后

各位读者,由于本篇幅度过长,为了避免影响阅读体验,下面我就大概概括了整理了

度过长,为了避免影响阅读体验,下面我就大概概括了整理了

[外链图片转存中…(img-Kjm207mf-1714258668769)]

[外链图片转存中…(img-NbHDGd00-1714258668770)]

[外链图片转存中…(img-Gdv6vOGR-1714258668770)]

[外链图片转存中…(img-wjKTF6xA-1714258668771)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 17
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值