六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

Java性能

[摘要]Java語言特別強調準確性,但可靠的行為要以性能作為代價。這一特點反映在自動收集垃圾、嚴格的運行期檢查、完整的字節碼檢查以及保守的運行期同步等等方面。對一個解釋型的虛擬機來說,由于目前有大量平臺可供挑選,所以進一步阻礙了性能的發揮。   “先做完它,再逐步完善。幸好需要改進的地方通常不會太多。”(...

  Java語言特別強調準確性,但可靠的行為要以性能作為代價。這一特點反映在自動收集垃圾、嚴格的運行期檢查、完整的字節碼檢查以及保守的運行期同步等等方面。對一個解釋型的虛擬機來說,由于目前有大量平臺可供挑選,所以進一步阻礙了性能的發揮。
  “先做完它,再逐步完善。幸好需要改進的地方通常不會太多。”(Steve McConnell的《About performance》[16])
  本附錄的宗旨就是指導大家尋找和優化“需要完善的那一部分”。

  D.1 基本方法
  只有正確和完整地檢測了程序后,再可著手解決性能方面的問題:
  (1) 在現實環境中檢測程序的性能。若符合要求,則目標達到。若不符合,則轉到下一步。
  (2) 尋找最致命的性能瓶頸。這也許要求一定的技巧,但所有努力都不會白費。如簡單地猜測瓶頸所在,并試圖進行優化,那么可能是白花時間。
  (3) 運用本附錄介紹的提速技術,然后返回步驟1。

  為使努力不至白費,瓶頸的定位是至關重要的一環。Donald Knuth[9]曾改進過一個程序,那個程序把50%的時間都花在約4%的代碼量上。在僅一個工作小時里,他修改了幾行代碼,使程序的執行速度倍增。此時,若將時間繼續投入到剩余代碼的修改上,那么只會得不償失。Knuth在編程界有一句名言:“過早的優化是一切麻煩的根源”(Premature optimization is the root of all evil)。最明智的做法是抑制過早優化的沖動,因為那樣做可能遺漏多種有用的編程技術,造成代碼更難理解和操控,并需更大的精力進行維護。

  D.2 尋找瓶頸
  為找出最影響程序性能的瓶頸,可采取下述幾種方法:

  D.2.1 安插自己的測試代碼
  插入下述“顯式”計時代碼,對程序進行評測:

  long start = System.currentTimeMillis();
  // 要計時的運算代碼放在這兒
  long time = System.currentTimeMillis() - start;

  利用System.out.println(),讓一種不常用到的方法將累積時間打印到控制臺窗口。由于一旦出錯,編譯器會將其忽略,所以可用一個“靜態最終布爾值”(Static final boolean)打開或關閉計時,使代碼能放心留在最終發行的程序里,這樣任何時候都可以拿來應急。盡管還可以選用更復雜的評測手段,但若僅僅為了量度一個特定任務的執行時間,這無疑是最簡便的方法。
  System.currentTimeMillis()返回的時間以千分之一秒(1毫秒)為單位。然而,有些系統的時間精度低于1毫秒(如Windows PC),所以需要重復n次,再將總時間除以n,獲得準確的時間。

  D.2.2 JDK性能評測[2]
  JDK配套提供了一個內建的評測程序,能跟蹤花在每個例程上的時間,并將評測結果寫入一個文件。不幸的是,JDK評測器并不穩定。它在JDK 1.1.1中能正常工作,但在后續版本中卻非常不穩定。
  為運行評測程序,請在調用Java解釋器的未優化版本時加上-prof選項。例如:
  java_g -prof myClass
  或加上一個程序片(Applet):
  java_g -prof sun.applet.AppletViewer applet.html
  理解評測程序的輸出信息并不容易。事實上,在JDK 1.0中,它居然將方法名稱截短為30字符。所以可能無法區分出某些方法。然而,若您用的平臺確實能支持-prof選項,那么可試試Vladimir Bulatov的“HyperPorf”[3]或者Greg White的“ProfileViewer”來解釋一下結果。

  D.2.3 特殊工具
  如果想隨時跟上性能優化工具的潮流,最好的方法就是作一些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地址,可到自己的機器上運行它們。



標簽:Java性能 
主站蜘蛛池模板: 中文字幕波多野不卡一区 | 在线视频二区 | 日本视频免费播放 | 天天综合天天添夜夜添狠狠添 | 日本在线成人 | 日日夜夜免费精品 | 天天插天天狠天天透 | 天天干中文字幕 | 一区二区三区视频在线播放 | 羞羞影院男女午夜爽爽影视 | 中文字幕精品视频在线观看 | 综合久青草视频 | 一二三四影院网在线观看免费 | 亚洲图区欧美 | 色资源站 | 欧美一级特黄aaaaaaa在线观看 | 全黄一级裸片视频免费区 | 最新精品亚洲成a人在线观看 | 日韩一级一欧美一级国产 | 日本不卡视频一区二区三区 | 天天夜夜人人 | 亚洲成a人片在线不卡 | 日日干日日射 | 青青草国产免费久久久下载 | 伊人久久大香网 | 四虎永久免费在线观看 | 亚洲高清国产品国语在线观看 | 欧日韩不卡在线视频 | 伊人久久免费视频 | 亚洲欧美日韩在线线精品 | 五月激情五月婷婷 | 色优久久 | 人人揉人人爽五月天视频 | 色狠狠色综合久久8狠狠色 色狠狠色综合吹潮 | 天天射狠狠干 | 四虎在线免费 | 亚洲天堂精品在线观看 | 亚洲男人的天堂久久无 | 日韩精品一区二区三区中文精品 | 日韩精品视频在线观看免费 | 欧美亚洲中日韩中文字幕在线 |