java 性能 优化_Java性能优化的5个技巧
java 性能 优化
优化Java代码需要了解Java中的不同元素如何交互以及如何与运行Java的操作系统交互。 使用这五个技巧和资源开始学习如何分析和优化代码。
在我们获得好处之前,您可能会担心许可问题。 Java由Oracle拥有,并受Oracle BCL许可证的约束,该许可证不是免费/开源许可证。 即便如此,Oracle Java还是许多开源项目的一部分 。 OpenJDK是Java平台的免费软件实现,已通过GPL v2许可。 (有关更多信息,请参见Wikipedia上的免费Java实现 。)
入门
性能优化取决于多种因素,包括垃圾收集,虚拟机和基础操作系统(OS)设置。 开发人员可以使用多种工具来进行分析和优化,并且可以阅读Java工具进行源代码优化和分析以了解其中的一些工具 。 如果您在使用术语和Java基础方面遇到困难,请查看Livecoding Java类别页面以获取实时流 ,已归档的视频和其他有用的信息。
“这取决于”
有必要了解,没有两个应用程序可以具有相同的优化,并且没有确定的路径可以优化Java应用程序。 这都是关于使用最佳实践并坚持正确的方式来处理性能优化方法论。 要真正处于性能优化的最顶端,作为Java开发人员,您需要对Java虚拟机(JVM)和底层操作系统有适当的了解:
- JVM和底层操作系统: Java虚拟机是任何Java应用程序的宿主。 阅读JVM内部指南,以了解有关JVM内部和操作系统差异的更多信息。
- JVM分发模型: Java分发模型为您的应用程序处理多个JVM实例。 分发模型可获取更多可用资源,从而提高了应用程序性能。 您可以采用两种方法前进。 第一种方法是在单个服务器上以2GB或8GB的堆大小运行多个JVM。 第二种方法是在多个服务器上运行一个JVM。 选择正确的方法取决于多种因素,包括可用性和响应能力。
- JVM体系结构:选择正确的JVM体系结构对于性能很重要。 您可以使用64位JVM机器或32位JVM机器。 通常,32位JVM的性能要优于64位JVM。 选择64位JVM的唯一原因是,如果您要求堆大小大于3GB。
在明确了性能优化的基本思想及其要素之后,我们现在将重点介绍可帮助您优化Java应用程序的技巧。
1.调整垃圾回收(GC)
由于垃圾回收的复杂性,很难找到应用程序的确切性能。 但是,如果您确实要优化应用程序,则需要相应地处理垃圾回收。 一般规则是更改GC设置并同时执行性能分析。
对结果感到满意后,就可以停止该过程并转向其他形式的优化。 确保除了平均交易时间外,您还要注意异常值。 当Java应用程序变慢时,异常值是真正的罪魁祸首,而且很难找到。
此外,您需要了解应用程序运行期间性能影响的影响。 每一周的速度下降可以忽略不计,而每一次数据库事务的速度下降则可能是一项代价高昂的事情。 相应地选择优化路径,然后根据工作量优化应用程序。
2.获得适合您的GC算法
让我们进一步了解GC优化。 毕竟,这是手头整个优化问题的关键。 当前,有四种Java垃圾收集器算法可供选择。 每种算法都可以满足不同的需求,因此您需要相应地进行选择。 许多开发人员无法优化其应用程序,因为他们对GC算法一无所知。
四种算法是串行收集器,并行/吞吐量收集器,CMS收集器和G1收集器。 要了解有关每个垃圾收集器及其工作方式的更多信息,请从Takipi博客中查看令人惊叹的垃圾收集器-串行,并行,CMS,G1 。 本文还讨论了Java 8对GC算法的影响以及其他微小变化。
回到理解 GC算法,根据了解Java垃圾收集 ,并发标记和扫描GC(或“ CMS”)算法是Web服务器应用程序的最佳算法选择。 并行GC算法非常适合具有内置可预测性的应用程序。
G1和CMS是并发操作的理想选择,但也会引起频繁的暂停。 选择还取决于权衡。 例如,即使与其他GC算法相比,GC暂停时间更长,也最好选择并行算法。
3. Java堆
Java内存堆在满足内存需求方面起着至关重要的作用。 总是最好从最小的堆分配开始,然后通过继续测试来增加它。 大多数情况下,优化问题是通过增加堆大小来解决的,但是如果存在大量的GC开销,则该解决方案将无法正常工作。
GC开销还会使吞吐量过低,从而导致应用程序异常缓慢。 此外,更早地调整GC可以帮助您避免堆大小分配方面的问题。 首先,您可以选择1GB到8GB之间的任何堆大小。 在选择正确的堆大小时,也可以使用旧对象和新一代对象的概念。
最后,堆大小应取决于旧对象对新一代对象的比率,先前的GC优化和liveset(即对象的内存大小)。
4.核心应用程序优化
核心代码优化是优化Java应用程序的最佳方法。 如果您的应用程序未响应GC和堆优化,则最好进行体系结构更改,并专注于应用程序如何处理信息。 使用聪明的算法并照顾对象可以解决很多问题,包括碎片,堆问题和垃圾回收问题。
5.使用最佳功能
Java具有多种功能来处理算法性能。 如果使用StringBuilder而不是简单的String,则性能上将不会有多少改进。 但是,还有其他方法可以在代码级别处理优化。 让我们在下面看看它们。
- 使用StringBuilder代替+运算符。
- 避免使用iterator()。
- 充分利用堆栈。
- 避免使用正则表达式,而使用Apache Commons Lang 。
- 远离递归。 递归非常耗费资源!
在Java 十大简单性能优化中阅读有关Java代码优化的更多信息。
结论
Java性能优化是一个很大的主题,本文显然不会涵盖所有内容。 如果您认为需要在文章中添加一些内容,请不要忘了通过以下评论与观众分享。
下面给大家分享一份在Github星标85K的性能优化笔记分享出来
因为这份文档的内容过多所以下面直接给大家展示部分图片章节需要获取的小伙伴可以直接转发+关注后
策略、方法和方法论
操作系统性能监控
JVM概览
JVM性能监控
Java应用性能分析
Java应用性能分析技巧
JVM性能调优入门
Java应用的基准测试
多层应用的基准测试
Web应用的性能调优
Web Service的性能
Java持久化及EnterpriseJava Bean的性能