苏州学码思
全国监督服务热线: 400-080-3312
苏州学码思 > java教程

Java性能优化技巧你知道哪些?

关键词:Java性能优化技巧      来源:苏州学码思 时间:2018年12月17日 摘要:这是一个通用技巧,可以帮助你避免在将性能改进部署到生产后经常会发生的许多意外问题。你应该总是定义一个测试整个应用程序的性能测试套件,并在性能改进之前和之后运行它。

关于Java性能优化相信大家都认为这不是一件简单的事情,需要Java人员有更多的时间累积更多的经验和技术知识,下面苏州学码思老师和大家详细说明一下。

Java性能优化技巧你知道哪些?

 

  1.应用程序创建性能测试

 

  这是一个通用技巧,可以帮助你避免在将性能改进部署到生产后经常会发生的许多意外问题。你应该总是定义一个测试整个应用程序的性能测试套件,并在性能改进之前和之后运行它。>>从零基础到实战学Java开发如何成长

 

  额外的测试运行将帮助你识别更改的功能和性能副作用,并确保不会导致弊大于利的更新。如果你工作于被应用程序若干不同部分使用的组件,如数据库或缓存等,那么这一点就尤其重要哦。

 

  2.知道必要之前不要优化

 

  可能是重要的性能调整技巧之一。你应该遵循常见的实践做法并尝试高效地实现用例。这并不意味着在你证明必要之前,你应该更换任何标准库或构建复杂的优化。在很多情况下,过早使用优化不但会占用大量时间,而且会使代码变得难以阅读和维护。更糟糕的是,这些优化通常不会带来任何好处,因为你花费大量时间来优化的是应用程序的非关键部分。

 

  你如何证明你索需要优化的东西?首先你需要定义应用程序代码的速度得多快,比如为所有API调用指定响应时间,或者指定在特定时间范围内要导入的记录数量。在完成这些之后,你就可以测量应用程序的哪些部分太慢需要改进。

 

  3.分析器查找真正的瓶颈

 

  遵循第一个建议并确定了应用程序的某些部分需要改良后的,从哪里开始,可以用两种方法来解决问题:查看你的代码,并从看起来可疑或者你觉得可能会产生问题的部分开始,或者使用分析器并获取有关代码每个部分的行为和性能的详细信息。

 

  基于分析器的方法可以让你更好地理解代码的性能影响,并且使你能够专注于重要的部分。

 

  4.处理的瓶颈

 

  创建测试套件并使用分析器分析应用程序之后,你可以列出一系列需要解决以提高性能的问题。这很好,但它仍然不能回答你应该从哪里开始的问题。你可以专注于速效方案,或从重要的问题开始。速效方案一开始可能会很有吸引力,因为你可以很快显示第一个成果。但有时,可能需要你说服其他团队成员或管理层认为性能分析是值得的,原因暂时是看不到什么效果的。

 

  总的来说,建议首先处理重要的性能问题。这将为你提供的性能改进,而且可能再也不需要去解决其中一些为了满足性能需求的问题。

 

  5.StringBuilder编程方式连接String

 

  有很多不同的选项来连接Java中的String。例如,你可以使用简单的+或+=,以及StringBuffer或StringBuilder。你应该选择哪种方法?

 

  当然是取决于连接String的代码。如果你是以编程方式添加新内容到String中,如果在for循环中,那么你应该使用StringBuilder。很容易使用,并提供比StringBuffer更好的性能。但请记住,与StringBuffer相比,StringBuilder不是线程安全的,可能不适合所有用例。你只需要实例化一个新的StringBuilder并调用append方法来向String中添加一个新的部分。在你添加了所有的部分之后,你就可以调用toString()方法来检索连接的String。

 

  这将创建一个新的StringBuilder,新的StringBuilder包含提供的String和16个额外字符的容量。当你向StringBuilder添加更多字符时,JVM将动态增StringBuilder的大小。假如你已经知道你的String将包含多少个字符,则可以将该数字提供给不同的构造方法以实例化具有定义容量的StringBuilder。这进一步提高了效率,因为它不需要动态扩展其容量。

 

  6.使用基元

 

  避免任何开销并提高应用程序性能的另一个简便而快速的方法是使用基本类型而不是其包装类。使用int来代替Integer,使用double来代替Double。这允许JVM将值存储在堆栈而不是堆中以减少内存消耗,并作出更有效的处理。

 

  7.避免BigInteger和BigDecimal

 

  在讨论数据类型,那么我们也快速浏览一下BigInteger和BigDecimal吧。尤其是后者因其精确性而受到大家的欢迎。但是这是有代价的。BigInteger和BigDecimal比简单的long或double需要更多的内存,并且会显著减慢所有计算。你如果需要额外的精度,或者数字将超过long的范围,那么三思而后行。这可能是你需要更改以解决性能问题的唯一方法,特别是在实现数学算法的时候。

 

  8.检查当前日志级别

 

  这个建议应该是显而易见的,但不幸的是,很多程序员在写代码的时候都会大多会忽略它。在你创建调试消息之前,始终应该首先检查当前日志级别。否则,你可能会创建一个之后会被忽略的日志消息字符串。

 

  不知道日志框架是否将使用日志消息的前提下。因此在创建调试消息之前,先检查当前的日志级别。

 

  9.使用+连接语句中的String

 

  当你用Java实现你的第一个应用程序时,可能有人告诉过你不应该用+来连接String。如果你是在应用程序逻辑中连接字符串,这是正确的。字符串是不可变的,每个字符串的连接结果都存储在一个新的String对象中。这需要额外的内存,会减慢你的应用程序,特别是如果你在一个循环内连接多个字符串的话。

 

  Java编译器会对此优化并在编译时执行连接。在运行时,你的代码将只使用1个String,不需要连接。

 

  10.缓存资源数据库连接

 

  缓存是避免重复执行昂贵或常用代码片段的流行解决方案。总的思路很简单:重复使用这些资源比反复创建新的资源要便宜。一个典型的例子是缓存池中的数据库连接。新连接的创建需要时间,如果你重用现有连接,则可以避免这种情况。

 

  创建一个新的Integer并不是太昂贵,但是由于它经常被使用,以至于缓存常用的值也可以提供性能优势。但是,当你考虑缓存时,请记住缓存实现也会产生开销。你需要花费额外的内存来存储可重用资源,因此你可能需要管理缓存以使资源可访问,以及删除过时的资源。所以,在开始缓存任何资源之前,请确保实施缓存是值得的,也就是说必须足够多地使用它们。

 

  以上是苏州学码思老师整理的Java性能优化技巧,希望对大家的Java学习有所帮助,如果大家在Java的学习过程中还有其他问题,欢迎大家进一步咨询苏州学码思的老师。


2016-2020 苏州学码思科技有限公司 .All Rights Reserved 苏ICP备16033487号 www.suzxms.com.cn