JAVa程序性能优化
懂得计算机性能的都知道,性能反应慢体现为:界面停顿,抖动,反应迟钝等
性能的表现有:
- 执行速度:程序是否迅速,响应时间是否够短
- 内存分配:内存分配是否合理,是否过多的消耗内存或者存在泄漏
- 启动时间:程序从运行可以正常的处理业务需要花费多长时间
- 负载承受能力:当系统压力上升时,系统的执行速度,响应速度的上升曲线是否平缓
性能的参考指标有:
- 执行时间:一段代码从开始到结束,所用的时间
- CPU时间:函数或者线程CPU的时间
- 内存分配:程序运行时所占用的内存空间
- 磁盘吞吐量:描述I/O的使用情况
- 网络吞吐量:描述网络使用情况
- 响应时间:系统对某用户行为或者事件作出的响应时间。响应时间越短,性能越好木桶原理与性能瓶颈
又称短板理论,其核心思想:一个木桶水的多少,并不取决于桶壁最高的木块,而取决与最短的木块,即使有充足的内存和CPU的前提下,如果I/O磁盘低下,那么系统总体会运行很慢,只有提高磁盘I/O性能才能对系统整体性能进行优化,因此磁盘的I/O就是系统的性能瓶颈
注意:系统的好坏最终取决于最差的组件,必须对其进行优化,而不是对系统表现最好的组件
最优可能成为系统瓶颈的计算机资源:
- 磁盘I/O:由于磁盘I/O读写速度比内存慢,如果等磁盘完成I/O完成,那么低效的I/O会拖累整个系统
- CPU:对计算机要求高的计算机应用,由于占用时间,不断大量的占用CPU资源,那么对CPU争夺导致性能问题
- 异常:对JAVA应用来讲,异常捕获和处理是非常消耗资源的,程序高平率进行异常处理
- 数据库:大部分应用程序离不开数据库,海量数据库读写操作可能费时
- 锁竞争:对于高并发的程序来说,如果存在激烈竞争,锁竞争会增加线程切换开销
- 内存:一般来说,只要应用程序设计合理,内存读写速度上不太可能成为性能瓶颈。除非应用提高了内存交换和扫描
- Amdanhl定律
它定义了串行系统并行后加速比的设计公式和理论上限
加速比定义:加速比=优化前系统消耗时/优化系统消耗时
加速比:优化前耗时与优化后耗时比值。加速比越高,优化越明显
二、性能调优层次,
除了可以从软件架构,JVM 虚拟机层,数据库以及操作系统层面通过进行调优,进而提升性能,设计调优处于调优上层,往往需要软件开发进行之前,由于软件开发设计和架构对软件整体质量有决定因素,设计调优对性能也是最大的。
设计优化最大特点可以规避某一组件,而非改良组件实现。因此开发人员必须监测频率和资源消耗间取衡
代码调优
需要熟悉相关语言的API,并正确使用API 或类库,对算法结构灵活使用 LikeList和ArrayList随机访问性能,同样的文件读写实现,使用Stream方式与JAVA NIO方式
JVM调优
对JVM虚拟机进行优化有一定程度的上升JAVA性能。JVM各项参数会直接影响性能。JVM堆大小,垃圾回收机制策略
数据库调优
可以使用JDBC的方式连接数据库,调优分为3部分
应用层对SQL语句进行优化
对数据库进行优化
对数据库软件进行优化
优化数据库访问层,使用JDBC进行查询,对大量SQL查询,可以使用preparestatement代替statement,以提高数据库查询数据效率:select语句显查询列名,避免用*
数据库进行优化时,主要目的是建立一个具有良好的表结构数据库,例如:用多表级联合查询效率可以合理冗余字段 ,对于大表使用水平切割或者类似ORCal分区表技术,为了提高数据库查询效率,可以建立合理索引