11个简单Java性能调优技巧

Posted 程序员软件

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了11个简单Java性能调优技巧相关的知识,希望对你有一定的参考价值。

第一时间关注推送的软件内容 

        大多数开发人员期望性能优化是一个复杂的话题,需要大量的经验和知识。好吧,这不是完全错了。优化应用程序获得最佳性能可能不是一件容易的事。但这并不意味着你不能做任何事情如果你没有获得这些知识。有几个容易遵循的建议和最佳实践,帮助您创建一个应用程序运行良好。

        这些建议是java特定的。但也有几个独立于语言的,可以适用于所有应用程序和编程语言。让我们来谈谈其中的一些通用的在我们的java特定的性能调优技巧。

1、你不知道这是不是必须的,不要去优化

        这可能是最重要的一个性能调优技巧。你应该遵循共同的最佳实践和尝试来有效地实现你的用例。但这并不意味着你应该取代任何标准库或构建复杂的优化才能证明是必要的。

        在大多数情况下,过早优化占用大量的时间,使代码难以阅读和维护。和使它更糟的是,这些优化通常不提供任何好处,因为你花很多时间优化应用程序的非关键部分。

        所以,你如何证明你需要优化吗?

        首先,您需要定义您的应用程序代码是多快,例如,通过指定一个最大响应时间为所有API调用或者您想要导入的记录在指定的时间框架。当你做完了,你可以测量你的应用程序的哪些部分是太慢,需要改进。当你这么做了,你应该看一看第二个提示。

2、使用分析器来找到真正的瓶颈

        在你之后第一个应用程序的建议,确定了部分需要改善,问自己从哪里开始?

你可以用两种方式来解决这个问题:

  • 你可以看一看你的代码,开始的部分看起来可疑的或你觉得它可能产生问题的地方。

  • 或者你使用一个分析器,每个部分的行为和性能的详细信息的代码。

        我希望我不需要解释为什么你应该按照第二种方法。

        它应该是显而易见的,profiler-based方法给你更好地理解代码的性能影响,并允许你专注于最重要的部分。如果你使用一个分析器,你会记得一些情况下,你感到惊讶的哪些部分代码创建了性能问题。不止一次我第一次想会让我错误的方向。

3、为整个应用程序创建一个性能测试套件

        这是另一个普遍的提示,可以帮助你避免很多意想不到的问题经常发生在您部署你的性能改进生产。你应该定义一个性能测试套件测试整个应用程序,并运行它之前和之后你在性能改进。

        这些额外的测试将帮助你确定你的变化的功能和性能的副作用,确保你不船更新导致弊大于利。尤其重要,如果你工作所使用的组件应用程序的不同部分,如数据库或缓存。

4、工作的最大瓶颈

        之后,您已经创建了您的测试套件和分析应用程序分析器,你有一个清单你想解决的问题来提高性能。这很好,但它仍然不回答这个问题,你应该开始。你可以专注于快速获胜,或者开始最重要的问题。

        你可能想要开始快赢了,因为你很快就能够显示第一个结果。有时,可能有必要说服其他团队成员或你的管理,性能分析是值得努力的。

        但总的来说,我建议从顶部开始,并开始着手进行最重要的性能问题。将为您提供最大的性能改进,你可能不需要解决几个以上的这些问题来满足您的性能需求。

        足够的一般性能调优技巧。让我们仔细看看一些java特定的。

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

        有很多不同的选择在Java连接字符串。例如,您可以使用一个简单+或+ =,好老StringBuffer或 StringBuilder.

        所以,你应该更喜欢哪种方式?

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

        你只需要实例化一个新的StringBuilder和调用添加方法来添加一个新的部分字符串。当你已经添加了所有部分,您可以调用toString()方法来检索连接字符串。

        下面的代码片段显示了一个简单的例子。在每个迭代中,这个循环将我转换成一个字符串,并将其添加在一起的空间StringBuilder…所以,到最后,这段代码写道“这是一个电平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定义的能力。进一步提高了自身的效率,因为它不需要动态扩展其能力。