JAVA性能优化权威指南 读书笔记(一)

来源:互联网 发布:移动数据流量卡 编辑:程序博客网 时间:2024/05/23 09:36

JAVA性能优化权威指南 读书笔记

  最近也算是比较认真的读了一下java性能优化权威指南,期间断断续续持续了大概一个半月,深感自己读书的效率和积极性还是存在问题,总之,在此我还是先记录一下相关的收获和感悟。其中书本中相对比较模糊的概念我在这里不进行太过详细的阐述,只有部分明确的概念会详细解释。

操作系统性能监控

  首先书本讲述的性能优化,那么我们就有必要从java有哪些在运行中比较直观反馈给我们的信息我们首先需要注意。

CPU使用率

  这个概念是我们首先要明确的一点,这里的CPU使用率是对应我们的应用而言的,并不是对应系统而言的。所以如果仅仅是看到系统的CPU使用比较高是不够的。我们要监测用户态CPU和系统太CPU的比例。相对来说用户态的CPU使用率越高说明应用对于CPU的使用更加完善,反之如果系统态CPU使用太高,说明在应用中存在比较大的共享资源竞争以及I/O设备的交互,我们就可以从这几个方面入手对于应用的性能进行适当的调优。

对于计算密集型的应用来说,还要监控每个时钟指令数以及每个指令时钟周期,这是由于在现代的操作系统工具中,如果CPU的状态是处于等待内存数据,CPU的状态也被归结于繁忙,而且CPU这种等待可能会长达好几百个时钟周期,所以这个东西在对于计算量很大或者是速度要求比较苛刻的应用中估计也是被纳入优化的范围的。

在书中有详细的提及各个不同操作系统中的CPU使使用率的监控方法以及相关指令和软件的应用,但是我认为这个部分都是临场可以查阅的内容在这里就不予记载。

CPU调度程序运行队列

  这个是除了CPU使用率之外比较明显有作用的指标,就我个人理解而言,这个参数相当于CPU队列中等待执行的任务排队数量,如果CPU的处理效率跟不上,自然排队的数量将会越来越多,一般来说当运行队列长度达到虚拟处理器个数的3-4倍的时候就会变得非常的卡顿,需要立即采取某些措施。

  一般来说这个情况都是从两个方面出发进行相关的优化,一方面的增加处理器的处理能力,也就是使用更好的CPU,更多线程的CPU,更多的机器,服务器集群等硬件上的方法,另一方面就是优化代码的执行时间,使得CPU能够尽快的把等待的队列缩短。不至于任务的积压。

内存的使用率

  在应用所需要的内存不能够再从物理内存中供应的时候就会使用到虚拟内存,虚拟内存顾名思义,并不是真正的内存,而是将硬盘的一部分空间划分暂时存放内存里面不能放下的内容。这就引发了一个问题,就是如果应用在使用到那部分被暂存到硬盘里面的内容的时候就会发生页面交换,将内存中的部分和硬盘中的暂存数据进行交换,一般来说这个行为是以页面作为单位的,所以整个应用的运行将会出现大量的硬盘I/O,并且存储于硬盘的内容不利于JVM的垃圾回收。

  一般这个问题的处理就相对比较复杂,可以通过JVM的垃圾收回机制的调优,应用代码的调优以及使用更多更大的内存来解决问题。

 

网络I/O使用率

     这个指标对于传统应用来说一般问题不会特别大,但是随着分布式的技术得到了发扬,这个指标将会变成一个比较会有影响的因素。如果网络的使用率如果出现问题,一般是对系统的相应延迟有比较明显的影响。

  对于处理这个问题一般我们可以通过代码中减少对于网络的调用,此外使用非阻塞的java NIO代替socket也可以改善部分性能。

 

磁盘I/O使用率

  对于部分有磁盘操作的应用来说如果需要性能的调优,那查看磁盘IO的情况也是一个十分必要的步骤,如果因为是读写磁盘过于频繁或者是文件过大等影响到了最终的应用的性能体现的话我们可以采用使用更好的硬盘,硬盘扩展或者是操作系统调优缓冲机制等方式来进行缓解,当然在代码中使用缓存读写文件对于这个性能的提升是十分必要的。

1 0
原创粉丝点击