原创 Java性能调优要注意什么?又有哪些方式?

发布时间:2020-01-11 15:55:17 浏览 2295 来源:博学谷 作者:照照

    Java性能调优要注意什么?又有哪些方式?一般来说,Java性能调优有着以下几个原则,即充分而不过分使用硬件资源、合理调整JVM和合理使用JDK包。在Java性能调优的过程中,我们要注意调优步骤、性能瓶颈的表象、外部处理系统的性能不足、CPU消耗分析、上下文切换等等。而Java性能调优的方式主要有设计调优、代码调优、JVM调优、数据库调优和操作系统调优。

     

    Java性能调优

     

    Java性能调优要注意什么?

     

    1、调优步骤:衡量系统现状、设定调优目标、寻找性能瓶颈、性能调优、衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈)、性能调优结束。
      

    2、性能瓶颈的表象:资源消耗过多、外部处理系统的性能不足、资源消耗不多但程序的响应速度却仍达不到要求。

     

    3、外部处理系统的性能不足:所调用的其他系统提供的功能或数据库操作的响应速度不够。资源消耗不多但程序的响应速度却仍达不到要求:程序代码运行效率不够高、未充分使用资源、程序结构不合理。
      

    4、CPU消耗分析:CPU主要用于中断、内核、用户进程的任务处理,优先级为中断>内核>用户进程。
      

    5、上下文切换:每个线程分配一定的执行时间,当到达执行时间、线程中有IO阻塞或高优先级线程要执行时,将切换执行的线程。在切换时要存储目前线程的执行状态,并恢复要执行的线程的状态。对于Java应用,典型的是在进行文件IO操作、网络IO操作、锁等待、线程Sleep时,当前线程会进入阻塞或休眠状态,从而触发上下文切换,上下文切换过多会造成内核占据较多的CPU的使用。
      

    6、运行队列:每个CPU核都维护一个可运行的线程队列。系统的load主要由CPU的运行队列来决定。运行队列值越大,就意味着线程会要消耗越长的时间才能执行完成。
      

    7、利用率:CPU在用户进程、内核、中断处理、IO等待、空闲,这五个部分使用百分比。
      

    8、网络IO消耗分析:对于分布式Java应用,网卡中断是不是均衡分配到各CPU(cat/proc/interrupts查看)。
      

    9、文件IO消耗分析:Linux在操作文件时,将数据放入文件缓存区,直到内存不够或系统要释放内存给用户进程使用。所以通常情况下只有写文件和第一次读取文件时会产生真正的文件IO。对于Java应用,造成文件IO消耗高主要是多个线程需要进行大量内容写入(例如频繁的日志写入)的动作、磁盘设备本身的处理速度慢、文件系统慢、操作的文件本身已经很大。
      

    10、JVM堆外的内存:swap的消耗、物理内存的消耗、JVM内存的消耗。
      

    11、文件IO消耗严重的解决方法:从程序的角度而言,造成文件IO消耗严重的原因主要是多个线程在写进行大量的数据到同一文件,导致文件很快变得很大,从而写入速度越来越慢,并造成各线程激烈争抢文件锁。

     

    Java性能调优有哪些方式?

     

    1、设计调优
      

    设计调优处于Java性能调优手段的上层,它往往须要在软件开发之前进行。在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设计和系统架构对软件总体设计质量有决定性的影响。所以,设计调优对系统的性能影响也是最大的,如果代码调优、JVM调优都是对系统微观层次的“量”的优化,那设计调优就是对系统”质”的优化.
      

    设计调优的一大显著特征是:它能够规避某一个组件的性能问题,而是改良组件的实现;打个比方,组件A通过循环监控不断的检測时间E是否发生,其检測行为必定会占用部分系统资源。因此,开发者必须检測频率和资源消耗上取得平衡。假设检測频率太低,尽管降低了资源消耗,可是系统实时反应性就会降低;假设进行代码层的调优,就须要优化检測方法的实现及要求得一个最为恰当的检測频率。对于这个问题,我们就能够用设计模式中的观察者模式 ,当事件E发生的时刻,由事件E通知组件A,从而触发组件A的行为。这样的设计从根本上攻克了存在性能隐患的循环监控,从根本上攻克了这一问题。进行设计调优时,设计人员和必须熟悉经常使用的设计方法,设计模式,以及主要的性能组件和经常使用的优化思想,并将其有机地集成在软件系统中。


     2、代码调优

     

    代码调优是在软件开发中,或者是软件开发完毕后,软件维护过程中进行的程序代码的改进和优化。代码优化涉及诸多编码技巧,须要开发者熟悉相关的语言API ,并在适合的场景中正确的使用相关API或类库。同一时候,对算法,数据结构的灵活使用,也是代码优化的一个重要内容。
      

    尽管代码优化时,从微观上对性能进行调整,可是一个”好”的实现和一个”坏”的实现,对系统的影响也是非常大的。还是打个比方,相同作为List的实现,LinkedList和ArrayList在随机訪问上的性能却差了好几个量级;比方相同是文件读写的实现,使用Stream方式和使用JAVA NIO的方式,其系能可能又会是还有一个数量级。因此,尽管与设计优化相比,笔者将代码优化成为在微观层面上的优化,但它却是对系统性能产生最直接影响的优化方法。

     

    3、JVM调优
      

    因为JAVA软件总是执行在JVM虚拟机之上。对JVM虚拟机进行优化,也能一定程度上的提升JAVA程序的性能。JVM通常能够在软件开发后期进行,如在开发完毕或者是软件开发的某一里程碑阶段。作为JAVA软件的执行平台,JVM的各项參数将会直接影响JAVA程序的性能。举个例子,JVM的堆大小,垃圾回收策略等等。要进行JVM层面的调优。须要开发者对JVM的执行原理和基本内存结构有一定的了解。如,堆内存的结构,GC的种类等。然后,根据引用程序的特点,设置合理的JVM启动參数。

     

    4、数据库调优
      

    对绝大部分应用系统而言,数据库是不可缺少的一部分,JAVA程序能够使用JDBC的方式连接数据库。对数据库的调优能够分为三个部分:在应用层对SQL语句进行优化;对数据库进行优化。对数据库软件进行优化。在应用层优化数据库訪问。涉及大量的编程技巧。比方。当使用JDBC进行查询的时候,对于大量拥有相同结构的SQL查询,能够使用PerparedStatement取代Statement。以提高数据库的查询效率。在使用Select语句中,显示指定要查询的列名 ,避免使用*在对数据库优化时,主要目的是建立一个具有良好表结构的数据库。在对数据库进行优化时。主要目的是建立一个具有良好表结构的数据库。比如,为了提高多表级联查询效率,能够合理地使用冗余字段。对于大表。能够使用行数据来水平分割,为了提高数据库的查询效率,能够建立有效且事宜的索引
      

    5、操作系统调优
      

    操作系统,调优的手段和參数可能有所不同。比如,在主流Unix系统中,共享内存段。信号量,共享内存最大值。共享内存最小值等都是能够进行优化的系统资源。此外,如最大文件句柄数,虚拟内存大小,磁盘的块大小等參数都可能对软件的性能产生影响,配置虚拟内存界面。

     

    以上就是关于Java性能调优的注意事项和解决方式,大家都看明白了吗?关于Java性能调优的注意事项和方式就讲到这里了,如果觉得本文对你有帮助,不妨把文章分享出去,让更多的人看到。

    申请免费试学名额    

在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!

上一篇: Java异常处理面试题整理附答案 下一篇: 如何管理Spring Bean的生命周期?具体步骤解析

相关推荐 更多

热门文章

  • 人工智能如何入门学习?前景如何
  • 未来互联网人才还稀缺吗?哪些技术方向热门?
  • 智能汽车用到哪些技术?
  • 产品可行性分析需要考虑几个方面?
  • 日常工作中程序员最讨厌哪些工作事项?
  • 博学谷狂野大数据学习多长时间?
  • IT互联网程序员的涨薪秘籍是什么?
  • Java多线程遇到死锁三招彻底解决
  • Python 开发人员经常遇哪些挑战?如何解决?
  • 狂野架构师课程如何?能学到什么?
  • 查看更多

扫描二维码,了解更多信息

博学谷二维码