在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
Java性能调优要注意什么?又有哪些方式?一般来说,Java性能调优有着以下几个原则,即充分而不过分使用硬件资源、合理调整JVM和合理使用JDK包。在Java性能调优的过程中,我们要注意调优步骤、性能瓶颈的表象、外部处理系统的性能不足、CPU消耗分析、上下文切换等等。而Java性能调优的方式主要有设计调优、代码调优、JVM调优、数据库调优和操作系统调优。
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性能调优的注意事项和方式就讲到这里了,如果觉得本文对你有帮助,不妨把文章分享出去,让更多的人看到。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
iHRM实战项目教程课程学什么?
要学习Activiti7工作流引擎、SAAS-HRM系统概述与搭建环境、SAAS-HRM-数据库设计与前端框架、SAAS-HRM系统用户权限设计概述、权限分配与jwt概述、权限分配与jwt概述、JWT的权限控制与Shiro入门、Shiro高级及SaaS-HRM的认证授权等内容。
6557
2019-11-08 10:24:19
学习Java需要什么基础?零基础能否学会?
如果对学习Java感兴趣,零基础也可以学会,对于相应基础的要求并不高。相对而言有基础学习java更有优势,目前很多人是零转行或有一定基础进一步提升,有基础比较关心的现有的资源对想学java是否有利,或想学习java都要关注哪些知识点。
4942
2020-02-12 15:48:25
什么是Java开发?Java编程可以做什么?
什么是Java开发?Java是一种程序设计语言,可跨平台应用软件的面向对象的程序。Java软件开发可基础架构选择、进行需求分析、架构编写、测试维护等。Java开发常用的IDE有Eclipse、NetBeans、IntelliJ IDEA。Eclipse是当下主流的集成开发环境,IntelliJ IDEA优秀的IDE具有代码智能提示等强大的功能。
5526
2020-04-24 10:30:07
Java线程池ThreadPoolExecutor的原理解析
ThreadPoolExecutor里面使用到JUC同步器框架AbstractQueuedSynchronizer、大量的位操作、CAS操作。ThreadPoolExecutor提供了固定活跃线程、额外的线程、任务队列以及拒绝策略这几个重要的功能。下面我们一起来看看Java 线程池ThreadPoolExecutor的原理解析。
4918
2020-05-27 14:56:59
Java的发展和前景如何?
目前大环境下没有稳定的语言,核心的是过硬的技术。如果够决心能吃苦,入门互联网行业是一个不错的选择。小朋友你可能有很多问题:学Java能找到好工作么、市场是不是饱和了、Java是不是没落了等问题。通过所有外部表现来看Java仍活着发展着。
4608
2020-06-23 10:50:35