温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何对Java进行性能优化

发布时间:2020-06-06 17:53:59 来源:亿速云 阅读:387 作者:Leah 栏目:编程语言

如何对Java进行性能优化?其实要解决这个问题也不难,为此小编总结了这篇文章,下面我们一起来看看Java进行性能优化的注意事项以及优化方式

 

如何对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性能优化的注意事项和解决方式,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI