翻手为云覆手雨,天地由我一手掌。逍遥不认仙与魔,总归由我性张扬。

Java程序性能调优的基本知识

上一篇 / 下一篇  2009-06-19 13:12:43 / 个人分类:性能分析技术

      Java程序性能调优的基本知识

    做性能测试3年多了,对性能或多或少有些了解,数据库性能问题大部分好诊断
 
好优化,因为数据库是透明性的东西,改了效果明显而且引起其他BUG的几率比较
 
多,不像应用程序代码,性能有问题要看是设计问题还是代码写法问题导致的,而且
 
在优化代码时也要非常小心,怕会引起其他BUG产生或者会让效率更低,还要考虑兼
 
容性问题等。做为性能测试人员,我承认自己越界了,在测试过程中出现的各种问题
 
只要有权限优化的,包括系统参数、数据库、应用程序等,不过每次调整完测试通过
 
都会发邮件说明原因。不然我测试环境改了生产环境还是一样这样测试优化等于做无
 
用功。
 
    下面是在测试过程中对JAVA程序性能方面的一些认识看法,希望看到博客的朋
 
友看完能提出自己的看法共同提高技术水平 。
 
  一 基本知识
.~8w }ejPWS0

`z{7rN/p-j%Pk0  1.1 性能是什么
:K0U8G7e*r7DY$}051Testing软件测试网(ThRWMY
  在性能调优之前,我们首先来了解一下性能是什么?
51Testing软件测试网srHC9vKFn\*{%I
  1) 运算的性能——看哪一个算法的执行性能最好?
51Testing软件测试网0K Ook]}3p'h{
  2) 内存的分配——程序运行时需要耗费多少内存?
:U)iA qp7it;j0
$b4[!e'qM0o-t2u#SV0  3) 启动的时间——程序启动需要多长时间?
51Testing软件测试网$b!p1L,X%w Jh.} f.R
  4) 程序的可伸缩性——在压力负载的情况下,程序的性能如何?
s fn2a k0
!e!o;D"d&yR0  5) 性能的感知——用户在什么情况下会觉得程序的性能不好?51Testing软件测试网.un6p^;Y `U9}o
51Testing软件测试网1XA:N4V:i*ERF
  以上五个方面,在具体的使用场景可以有选择的去评判。
 
  1.2 调优的规则51Testing软件测试网w"PpZ]/[j8lC
51Testing软件测试网z`6c6Q)Xf C8X:S
  我们只需要关心对程序有影响,可以察觉到的性能问题,而不是每一个类中的每
 
一个方法我们都需要想方设法的提高性能。如果程序的性能没有达到我们所期望的要
 
求,我们才需要考虑如何优化性能。同样的,晦涩的代码虽然提高了程序的性能,但
 
是很难维护,这个开发人员离职了下个接手的估计够呛除非技术很牛或者代码注释写
 
得很好。所以我们需要折中的考虑以上两种情况,使得程序的代码是优美的,并且运
 
行的足够快,达到客户所期望的性能要求。---其实这点很难做到。51Testing软件测试网-H/eM|B@Mq3I
51Testing软件测试网0ua7h(c9q1Q
  优化代码甚至会导致不良的结果,在开始性能调优前,需要先指出不优化代码的
 
一些理由。51Testing软件测试网7fAP.I4|%B3He4r(y{/g
51Testing软件测试网N.n v4Z)Q Fn~!{$M
  1) 如果优化的代码已经正常工作,优化后可能会引入新的bug,所以优化后功
 
能测试很重要特别是优化基类的东西;51Testing软件测试网"` QwA!Q4D8l8cf
51Testing软件测试网`d1R@}3Yk3Z
  2) 优化代码趋向于使代码更难理解和维护因此注释很重要,要做良好的代码注
 
释习惯。51Testing软件测试网&P IP0c.|}s

*\SMf!]Eti0  3)对于跨平台的,在一个平台上优化的代码,在另一个平台上可能更糟;51Testing软件测试网GcMZujs\

"C5T X2b ` {Y0  4) 花费很多时间在代码的优化上,提高了很少的性能,却导致了晦涩的代码。
 
确实,在优化前,我们必须认真的考虑是否值得去优化。51Testing软件测试网 \-A8_#[ at+f%n
51Testing软件测试网-dv~;p:XV
  1.3 调优的步骤
a"\,D%XW O0
XwX&f3c'hM ~{f0  一般我们提高应用程序的性能划分为以下几个步骤:51Testing软件测试网K sC8K'x PJl7r

U4q?#L3zk%_5h0  1) 明确应用程序的性能指标,怎样才符合期望的性能需求;
kTZ ]~U051Testing软件测试网'^C;ZqNgP
  2) 在目标平台进行测试;
5aY |p3nG$? s0
"M_*~8HC#cA{0  3) 如果性能已经达到性能指标就不用优化了;
8wQ!A,JER[6k051Testing软件测试网|8d@Jv/?I$]}G
  4) 查找性能瓶颈;
0`x$abpg VSR051Testing软件测试网-KPG@Dh v U
  5) 修改性能瓶颈;
6eSX#?d'F*x J051Testing软件测试网$@ Q ]~~3y E
  6) 返回到第2步。
*h]1_2mA051Testing软件测试网5J NMO~7T2|D'B
  二 JDK调优51Testing软件测试网N.c6G |8yas_
51Testing软件测试网#^'EsYb+y L
  2.1 选择合适的JDK版本51Testing软件测试网ia mg|&]&E
51Testing软件测试网1\)b;S ~5qO_f
  不同版本的JDK,甚至不同厂家的JDK可能都存在着很大的差异,对于性能优化
 
的程度不同。

Q6{;qh8D._ O%Q0  2.2 垃圾收集Java堆的优化
l/jj'Hb\Ew#r ]0
!B.r/lOY3Y3u5IP0  垃圾收集就是自动释放不再被程序所使用的对象的过程。当一个对象不再被程序
 
所引用时,它所引用的堆空间可以被回收,以便被后续的新对象所使用。垃圾收集器
 
必须能够断定哪些对象是不再被引用的,并且能够把它们所占据的堆空间释放出来。
 
如果对象不再被使用,但还有被程序所引用,这时是不能被垃圾收集器所回收的,此
 
时就是所谓的“内存泄漏”。监控应用程序是否发生了内存泄漏,有一个非常优秀的
 
监控工具推荐给大家——Quest公司的JProbe工具,使用它来观察程序运行期的内存
 
变化,并可产生内存快照,从而分析并定位内存泄漏的确切位置,可以精确定位到源码内。

TAG:

 

评分:0

我来说两句

Open Toolbar