posts - 8,  comments - 6,  trackbacks - 0

          1.7  以納秒級的時間計算:使用System.nanoTime 

          Java5+

          摩爾定律是一種眾所周知的現象,即計算機中的晶體管數量和它的處理速度隨時間呈指數規律增長。作為仙童半導體公司(Fairchild Semiconductor)的研發領導人,戈登•摩爾于1965年提出了這一偉大發現。迄今為止,它仍有效。
          與Java首次出現的時候相比,當前計算機的速度要快得多,對于很多應用程序而言以毫秒計時已不再能夠滿足要求。你可能使用過java.lang.System類,利用currentTimeMillis方法來獲得一個方法調用或一段代碼的定時信息。此方法可以用來度量執行某操作所花費的時間。但是,在運算速度更快的計算機上操作花費的時間可能遠小于1毫秒,于是可以在一個for循環中執行此操作上百次或上千次,然后除以循環次數來計算此操作的單位時間。考慮下面的示例:

          long startTime = System.currentTimeMillis();
          for (int i=0; i<1000; i++) {
          performOperation(); // something we want to measure
          }
          long endTime = System.currentTimeMillis();
          long totalTimeInMillis = endTime - startTime;
          // because the count was 1000, it's easy to get the unit time
          long unitTimeInMicros = totalTimeInMillis;

          這種一種很簡單的運算,因為使用了for循環1000次。但是如果要度量亞微秒該如何實現呢?

          for(int i=0; i<1000000; i++) { performOperation(); }
          如果從人類的角度來看,可憐的for循環將不得不不厭其煩地百萬次的頻繁循環!此外,只有在重復執行操作沒有副作用的情況下使用for循環來計算時間才是有用的。如果操作是調用java.util.Collections.sort方法,那么將很難計算出排序過程花費的時間。在Java 5中,System類有一個新的nanoTime方法,它能返回一個納秒精度的計數器。盡管不能將它用于度量絕對時間,但是它能夠很好地度量時間差別。

          List myList = initializeList();  // initialize the List somehow
          long startTime = System.nanoTime();
          Collections.sort(myList);         // measuring the sort time
          long endTime = System.nanoTime();
          long differenceInNanoseconds = endTime - startTime;

          遺憾的是,運行上面的代碼時無法保證實際上獲得的是納秒級的度量。但是使用更快的機器和良好的JRE實現,對于測試目的而言它是一種有用的度量方法。可以在JDK 5文檔中找到更多有關此方法的信息。鑒于操作系統特性、機器處理速度和系統負載的不同,得到的由nanoTime方法返回的值可能會有很大的變化。隨著時間的推移此問題應該會有所改善,摩爾定律基本上能保證這一點。

          參考資料:

          想要了解摩爾的原始論文,請參看Gordon E. Moore, Cramming More Components onto Integrated Circuits, Electronics, Vol. 38, No. 8 (April 19, 1965)。此外,還可以在網上獲得該論文,參看本書的網站http:// wickedcooljava.com以獲得URL。


          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 霍林郭勒市| 益阳市| 东乡县| 民丰县| 张家川| 汉中市| 南陵县| 桂平市| 林州市| 连州市| 南开区| 永修县| 沂南县| 商城县| 云浮市| 公安县| 陆良县| 绥宁县| 平顶山市| 建始县| 东乡县| 广灵县| 开鲁县| 博客| 会同县| 镶黄旗| 错那县| 福建省| 大洼县| 襄樊市| 维西| 海阳市| 抚顺市| 惠来县| 温泉县| 隆化县| 万载县| 滕州市| 芦山县| 县级市| 红桥区|