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性能调优的注意事项和方式就讲到这里了,如果觉得本文对你有帮助,不妨把文章分享出去,让更多的人看到。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java进阶学习总结Redis备份方式
对于Java进阶的学习者来说,Redis备份方式是需要弄清楚的重点之一。Redis备份方式即RDB和AOF两种。本文就围绕着RDB和AOF进行阐述,主要分成redis持久化的两种方式、数据恢复和RDB和AOF对比总结三大部分,感兴趣的同学就继续看下去吧!
3260
2019-08-16 18:09:10
学Java买啥电脑?电脑配置推荐
学Java买啥电脑?对Java初学者来讲,只是刚刚入门或是做点简单的操作,不需要对电脑配置有什么特别的要求。当然,如果大家学到后期,确实需要配置更好的电脑。比如内存大一些,处理器快一些等等。下面小编就具体讲讲,学Java最好买什么配置的电脑。
7966
2019-08-22 11:38:33
Java程序员常见并发编程问题集锦
Java语言从第一个版本就内置了对多线程的支持,但是从事Java开发工作的人都知道,编写优质的并发代码难度非常大。相信通过大量的时间之后,会对并发编程有更多的认识,甚至可以获取更多编发编程的方案与选择。这里与大家一起探讨一下Java程序员培训中经常遇到的并发编程的问题。
2519
2019-11-25 18:53:47
Activiti实战教程学习哪些知识点?
Activiti实现自定义工作流程,新版Activiti7的工作流体系架构与内部工作机制,实现IHRM常见多种业务流程,Activiti自动化业务流程管理,实现SpringBoot+Activiti整合开发审批中心模块,可以做到项目中审批中心模块,针对不同需求做到工作流的定制化。
2535
2019-11-28 15:44:45
复工后求职Git面试题整理
随着疫情的好转,近期将迎来复工热潮,不少公司企业也纷纷开始了招聘。虽然说受疫情影响,招聘需求比起往年有了一定程度的减少,但是总体上来看互联网公司的技术岗位仍然处于人才紧缺的现状,因此大家更要抓住这次复工求职的机会,好好准备面试。本文为大家整理了Java面试必考的Git面试题,需要复习这部分知识点的朋友可以尝试着做一做。
2236
2020-03-02 23:52:05
热门文章
- 人工智能如何入门学习?前景如何
- 未来互联网人才还稀缺吗?哪些技术方向热门?
- 智能汽车用到哪些技术?
- 产品可行性分析需要考虑几个方面?
- 日常工作中程序员最讨厌哪些工作事项?
- 博学谷狂野大数据学习多长时间?
- IT互联网程序员的涨薪秘籍是什么?
- Java多线程遇到死锁三招彻底解决
- Python 开发人员经常遇哪些挑战?如何解决?
- 狂野架构师课程如何?能学到什么? 查看更多
扫描二维码,了解更多信息
