<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gr8vyguy@Blogjava

    親身體驗JIT(Just in time compilation)

    JIT是Just in time compilation的縮寫, 是一種利用在運行時將字節碼(Bytecode)翻譯為機器碼(Machine code),并保存在內存中, 在后續的運行中直接調用機器碼, 從而改善字節碼編譯語言性能的技術。JVM的Hotspot就是Java虛擬機中JIT的實現.

    簡單的說,也就是當一段代碼被運行的次數大于某個值時, 成為所謂的"Hot Spots", JVM就會把這段代碼編譯成機器碼. 通過下面的程序,我們將看到JVM的Hot Spot所起的作用. 程序中用到了一個高精度的Java計時器, 看我的另外一篇隨筆用JNI實現一個高精度的Java計時器.
     1 public class JITDemo {
     2 
     3     public static void main(String[] args) {
     4         Timer timer = new Timer();
     5 
     6         for (int i = 0; i < 25; i++) {
     7             timer.reset();
     8             sum(100);
     9             System.out.println(i + "" + timer.getDuration());
    10         }
    11     }
    12 
    13     public static int sum(int n) {
    14         if (n <= 1)
    15             return 1;
    16         return n + sum(n - 1);
    17     }
    18 }

    上面的程序調用sum方法25次, 并記錄了每一次所用的時間, 運行結果是
    0: 0.1651047828704486
    1: 0.027936511484001458
    2: 0.014247620856840743
    3: 0.014247620856840743
    4: 0.013968255742000729
    5: 0.014247620856840743
    6: 0.014247620856840743
    7: 0.013968255742000729
    8: 0.013968255742000729
    9: 0.014247620856840743
    10: 0.014526985971680758
    11: 0.014247620856840743
    12: 0.014247620856840743
    13: 0.014247620856840743
    14: 0.39111116077602043
    15: 1.551035117591761
    16: 0.008101588330360423
    17: 0.007263492985840379
    18: 0.007542858100680393
    19: 0.007542858100680393
    20: 0.007263492985840379
    21: 0.007542858100680393
    22: 0.007542858100680393
    23: 0.007263492985840379
    24: 0.007263492985840379

    我們看到第14次的調用耗時突然增加了, 然后在第16次以后下降到14次以前的一半左右.

    這不是偶然的, 你可以多次運行這個程序, 每次你都會看到類似的結果.

    前面說當一段Java代碼運行的次數大于某個值時, 會被編譯成機器碼,這個值默認是1500次。而每個 sum(100) 回歸調用sum方法100次, 第14次的時候,sum正好被調用了1500次(從0開始計數)。也就是說第14次的時候激活了JVM去編譯sum方法,所以耗時突然增加,然后又減少。

    更進一步的證明是, 用 java -XX:+PrintCompilation JITDemo 來啟動程序,結果是
     ......
    12: 0.014247620856840743
    13: 0.014247620856840743
      7       cj.compiler.jit.JITDemo::sum (16 bytes)
    14: 0.8411683607832839
    ......
    紅色的行正好指示sum方法被編譯成機器碼。

    轉載請保留http://m.tkk7.com/xilaile/archive/2007/02/24/100445.html

    posted on 2007-02-24 00:05 gr8vyguy 閱讀(4453) 評論(1)  編輯  收藏 所屬分類: Java

    評論

    # re: 親身體驗JIT(Just in time compilation) 2007-02-28 05:10 liigo

    不錯,學習了。  回復  更多評論   

    <2007年2月>
    28293031123
    45678910
    11121314151617
    18192021222324
    25262728123
    45678910

    導航

    統計

    公告

  • 轉載請注明出處.
  • msn: gr8vyguy at live.com
  • 常用鏈接

    留言簿(9)

    隨筆分類(68)

    隨筆檔案(80)

    文章分類(1)

    My Open Source Projects

    搜索

    積分與排名

    最新評論

    主站蜘蛛池模板: 亚洲精品无码永久在线观看你懂的| 大学生高清一级毛片免费| 亚洲熟妇无码久久精品| aa级一级天堂片免费观看| 免费观看又污又黄在线观看| 亚洲国产精品无码AAA片| 国产三级在线观看免费| 无码日韩人妻AV一区免费l| 亚洲人成电影在线天堂| 四虎成人免费观看在线网址| 大地资源在线资源免费观看| 亚洲一区二区三区亚瑟| 国产成人99久久亚洲综合精品| 最近最新高清免费中文字幕| 欧美日韩亚洲精品| 亚洲午夜未满十八勿入| 亚洲精品国产精品乱码不卡| 黄色成人免费网站| 毛片基地看看成人免费| 亚洲а∨精品天堂在线| 91精品国产亚洲爽啪在线观看| 免费国产成人高清视频网站| 18pao国产成视频永久免费| 一区二区三区免费在线视频 | 日韩在线天堂免费观看| 国精产品一区一区三区免费视频| 亚洲午夜无码久久| 久久精品夜色国产亚洲av| 国产免费小视频在线观看| 69天堂人成无码麻豆免费视频| 国产裸体美女永久免费无遮挡 | 日本亚洲欧美色视频在线播放| 亚洲网站在线观看| 久久久久亚洲AV无码专区网站 | 日本亚洲成高清一区二区三区| 国产福利免费在线观看| 59pao成国产成视频永久免费| 国产精品无码永久免费888| 国产精品亚洲专一区二区三区| 亚洲大香人伊一本线| 亚洲高清在线播放|