Java性能优化的五种方式算法
一,JAVA性能优化之设计优化
设计优化处于性能优化手段的上层。它每每需要在软件开发以前进行。在软件开发以前,系统架构师应该就评估系统可能存在的各类潜在问题和技术难点,并给出合理的设计方案,由于软件设计和系统架构对软件整体设计质量有决定性的影响。因此,设计调优对系统的性能影响也是最大的,假设说,代码优化。JVM优化都是对系统微观层次的“量”的优化,那设计优化就是对系统”质”的优化.
设计优化的一大显著特征是:它可以规避某一个组件的性能问题,而是改良组件的实现;比方:组件A经过循环监控不断的检測时间E是否发生,其检測行为一定会占用部分系统资源,所以,开发者必须检測频率和资源消耗上取得平衡,假设检測频率过低,尽管下降了资源消耗,但是系统实时反应性就会下降,假设进行代码层的调优,就需要优化检測方法的实现及要求得一个最为恰当的检測频率.对于这个问题咱们就可以用设计模式中的观察者模式 ,当事件E发生的时刻,由事件E通知组件A,从而触发组件A的行为.这样的设计从根本上攻克了存在性能隐患的循环监控,从根本上攻克了这一问题.
进行设计优化时,设计人员和必须熟悉常用的设计方法,设计模式,以及主要的性能组件和常用的优化思想,并将其有机地集成在软件系统中.
注意:一个良好的系统设计可以规避很是多潜在在的性能问题.所以,尽量多花些时间在系统设计上,是建立高性能程序的关键
二,JAVA性能优化之代码优化
代码调优是在软件开发中,或者是软件开发完毕后,软件维护过程当中进行的程序代码的改进和优化.代码优化涉及诸多编码技巧,需要开发者熟悉相关的语言API ,并在适合的场景中正确的使用相关API或类库.同一时候,对算法,数据结构的灵活使用,也是代码优化的一个重要内容.
尽管代码优化时从微观上对性能进行调整,但是一个”好”的实现和一个”坏”的实现对系统的影响也是很是大的.比方,相同做为List的实现,LinkedList和ArrayList在随机訪问上的性能却差了好几个量级;比方相同是文件读写的实现,使用Stream方式和使用JAVA NIO的方式,其系能可能又会是还有一个数量级.
所以,尽管与设计优化相比,笔者将代码优化成为在微观层面上的优化,但它倒是对系统性能产生最直接影响的优化方法.
三,JVM优化
由于JAVA软件老是执行在JVM虚拟机之上。对JVM虚拟机进行优化也能必定程度上的提高JAVA程序的性能。JVM一般可以在软件开发后期进行,如在开发完毕或者是软件开发的某一里程碑阶段。
做为JAVA软件的执行平台。JVM的各项參数将会直接影响JAVA程序的性能。数据库
比方,JVM的堆大小,垃圾回收策略等等。
要进行JVM层面的调优。需要开发者对JVM的执行原理和基本内存结构有必定的了解。如,堆内存的结构,GC的种类等。而后,根据引用程序的特色。设置合理的JVM启动參数。编程
四。数据库优化
对绝大部分应用系统而言。数据库是不可缺乏的一部分。JAVA程序可以使用JDBC的方式链接数据库。对数据库的调优可以分为三个部分:设计模式
- 在应用层对SQL语句进行优化;
- 对数据库进行优化。
- 对数据库软件进行优化。
在应用层优化数据库訪问。涉及大量的编程技巧。比方。当使用JDBC进行查询的时候,对于大量拥有相同结构的SQL查询,可以使用PerparedStatement取代Statement。以提升数据库的查询效率。在使用Select语句中,显示指定要查询的列名 ,避免使用*
在对数据库优化时,主要目的是创建一个具备良好表结构的数据库。性能优化
比方,为了提升多表级联查询的效率,可以合理地使用冗余字段;对于大表,可以使用行的水平分割或者类似Oracle分区的技术;为了提升数据的查询的效率,可以创建有效水平分割或者类似Oracle分区表的技术;为了提升数据库查询效率。在select语句中。显示指定要查询的列名,避免使用*。
在对数据库进行优化时。主要目的是创建一个具备良好表结构的数据库。比方,为了提升多表级联查询效率,可以合理地使用冗余字段。对于大表。可以使用行数据来水平分割,为了提升数据库的查询效率,可以创建有效且事宜的索引
五,JAVA性能优化之操做系统优化
操做系统,调优的手段和參数可能有所不一样,比方,在主流Unix系统中。共享内存段。信号量,共享内存最大值(shmmax)。共享内存最小值(shmmin)等都是可以进行优化的系统资源.此外,如最大文件句柄数,虚拟内存大小,磁盘的块大小等參数均可能对软件的性能产生影响.配置虚拟内存界面数据结构