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的性能

资源获取:

大家点赞、收藏、关注、评论啦 、查看

差距不止一星半点,Github星标85K的性能优化法则圣经相关推荐

  1. Github星标超3k的推荐系统入门资料合集(含教程、论文、代码、数据)

    本篇文章是对公众号<机器学习与推荐算法>历史文章的汇总以及对干货内容的梳理,力争把最全面的干货与最完整的知识体系以最清晰的方式呈现给大家,希望大家能够精准快速地获取到自己想学习的内容,尽到 ...

  2. 推荐一款 GitHub 星标 11.5K 的神器,可将任何设备转换为电脑辅助屏幕

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 今天,分享一个神器:deskreen,它可以将将任何设备转换为计算机的辅助屏幕,目前已经在 Github 上标星 ...

  3. Github星标90K?京东架构师一篇讲明白百亿级并发系统架构设计

    学习高并发系统设计的原因 高并发到底是什么,想必各位多多少少对此都有所了解,那我在这就不多说了.真正经历过"双11"以及"618"的小伙伴应该都知道,在大促时如 ...

  4. 一款牛逼的Java工具类库,GitHub星标10.7k+,你敢用吗?

    点击"开发者技术前线",选择"星标????" 让一部分开发者看到未来 来自:Ryan Wang 链接:ryanc.cc/archives/hutool-java ...

  5. GitHub 星标 115k+的 Java 教程,超级硬核!下载量突破 1 万次!

    CSDN 的同学们,大家好,我是二哥呀! 学 Java 其实不难,重要的是找到好的学习资料和学习方法,然后付诸实践. 这里给大家分享一些我的经验心得,希望能给大家一些启发和帮助. 一开始不要啃那些经典 ...

  6. APITable:免费开源的多维表格与可视化数据库,上线1天斩获GitHub星标1000+

    前言 vika维格表 将70 万行代码开源了. 更为准确地说,我们正式发布了vika维格表的社区版--「APITable」. 这意味着,你可以通过免费开源的多维表格技术去创造更多有趣的事物. 为了方便 ...

  7. Memos:一款开源的超高颜值备忘录,GitHub 星标 6.3k

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 这是一款完全开源的基于 B/S 的备忘录系统,目前从GitHub[1]上6.3k可看出其是一款非常受喜爱的开源软件 ...

  8. GitHub 星标 17.6 K+,这款超好用的免费网站分析工具太赞了!

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! ​ 作为一个网站的运营者,我们需要了解用户的行为,比如他们在网站上做了什么,网站吸引了哪些人,以及网站的瓶颈在哪里 ...

  9. 解放双手,推荐一款 GitHub 星标 8.2k+的命令行软件管理器

    小二是公司新来的实习生,之前面试的过程中对答如流,所以我非常看好他.第一天,我给他了一台新电脑,要他先在本地搭建个 Java 开发环境. 二话不说,他就开始马不停蹄地行动了.真没想到,他竟然是通过命令 ...

最新文章

  1. Exchange 分析器工具介绍及案例分析
  2. sqlplus set;命令
  3. java token生成和验证_java生成定长度的随机验证码
  4. wd2003计算机考试,2015计算机一级MsOffice练习:Word2003
  5. SAP云平台对Kubernetes的支持
  6. 小demo, java swing窗口编程(JDK 1.6)
  7. 第三十二期:你们都是怎么学Python的?
  8. Effective Java~45. 谨慎使用Stream
  9. 我端午节又来免费送书了!
  10. es6 字符串的 Iterator 接口
  11. [导入]ASP.NET2.0中Tabs的简单实现
  12. 【转】IDEA类和方法注释模板设置(非常详细)
  13. 电视还有前途吗?也许它的前途就是嫁给互联网
  14. 【MATLAB】GA优化算法整定PID控制器参数(三)—— 一阶带时延的被控对象
  15. 高考加油别学计算机图片,高考加油图片励志壁纸图片欣赏
  16. 图的遍历 --- 广度优先搜索【借助队列实现】 + 深度优先搜索【借助递归栈】
  17. Windows IIS IUSR IWAM 帐户密码同步
  18. apache评分表的意义_APACHE评分系统及评分表 -
  19. win7网络里面没有计算机,Win7没有无线网络选项教你完美解决
  20. Android判断手机号码是否是正确的手机号码

热门文章

  1. 中层管理者,你到底该管理什么?
  2. [Windows]_[中级]_[界面程序打开控制台输出-转发输出到控制台]
  3. VSPD  7.0  虚拟串口创建不成功能,  修复步骤:
  4. 3dmaxs坐标轴不显示灰色显示(没有坐标轴箭头)
  5. 解决idea不检查语法错误问题
  6. git 撤销刚才的rebase_从撤销 rebase 谈谈 git 原理
  7. vue搭配element, el-input出现高频无法粘贴文本的情况
  8. 单片机可以替代PLC吗?
  9. Android(Java)加载SO文件
  10. 【九】分布式微服务架构体系详解——共识问题