如果想隨時跟上性能優化工具的潮流,最好的方法就是作一些Web站點的?。比如由Jonathan Hardwick制作的“Tools for Optimizing Java”(Java優化工具)網站:
http://www.cs.cmu.edu/~jch/java/tools.html
D.2.4 性能評測的技巧
■由于評測時要用到系統時鐘,所以當時不要運行其他任何進程或應用程序,以免影響測試結果。
■如對自己的程序進行了修改,并試圖(至少在開發平臺上)改善它的性能,那么在修改前后應分別測試一下代碼的執行時間。
■盡量在完全一致的環境中進行每一次時間測試。
■如果可能,應設計一個不依賴任何用戶輸入的測試,避免用戶的不同反應導致結果出現誤差。
D.3 提速方法
現在,關鍵的性能瓶頸應已隔離出來。接下來,可對其應用兩種類型的優化:常規手段以及依賴Java語言。
D.3.1 常規手段
通常,一個有效的提速方法是用更現實的方式重新定義程序。例如,在《Programming Pearls》(編程拾貝)一書中[14],Bentley利用了一段小說數據描寫,它可以生成速度非?、而且非常精簡的拼寫檢查器,從而介紹了Doug McIlroy對英語語言的表述。除此以外,與其他方法相比,更好的算法也許能帶來更大的性能提升——特別是在數據集的尺寸越來越大的時候。欲了解這些常規手段的詳情,請參考本附錄末尾的“一般書籍”清單。
D.3.2 依賴語言的方法
為進行客觀的分析,最好明確掌握各種運算的執行時間。這樣一來,得到的結果可獨立于當前使用的計算機——通過除以花在本地賦值上的時間,最后得到的就是“標準時間”。
運算 示例 標準時間
本地賦值 i=n; 1.0
實例賦值 this.i=n; 1.2
int增值 i++; 1.5
byte增值 b++; 2.0
short增值 s++; 2.0
float增值 f++; 2.0
double增值 d++; 2.0
空循環 while(true) n++; 2.0
三元表達式 (x<0) ?-x : x 2.2
算術調用 Math.abs(x); 2.5
數組賦值 a[0] = n; 2.7
long增值 l++; 3.5
方法調用 funct(); 5.9
throw或catch異常 try{ throw e; }或catch(e){} 320
同步方法調用 synchMehod(); 570
新建對象 new Object(); 980
新建數組 new int[10]; 3100
通過自己的系統(如我的Pentium 200 Pro,Netscape 3及JDK 1.1.5),這些相對時間向大家揭示出:新建對象和數組會造成最沉重的開銷,同步會造成比較沉重的開銷,而一次不同步的方法調用會造成適度的開銷。參考資源[5]和[6]為大家總結了測量用程序片的Web地址,可到自己的機器上運行它們。
1. 常規修改
下面是加快Java程序關鍵部分執行速度的一些常規操作建議(注意對比修改前后的測試結果)。
將... 修改成... 理由
接口 抽象類(只需一個父時) 接口的多個繼承會妨礙性能的優化
非本地或數組循環變量 本地循環變量 根據前表的耗時比較,一次實例整數賦值的時間是本地整數賦值時間的1.2倍,但數組賦值的時間是本地整數賦值的2.7倍
鏈接列表(固定尺寸) 保存丟棄的鏈接項目,或將列表替換成一個循環數組(大致知道尺寸) 每新建一個對象,都相當于本地賦值980次。參考“重復利用對象”(下一節)、Van Wyk[12] p.87以及Bentley[15] p.81
x/2(或2的任意次冪) X>>2(或2的任意次冪) 使用更快的硬件指令
D.3.3 特殊情況
文章來源于領測軟件測試網 http://www.kjueaiud.com/