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

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

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

    隨筆 - 3  文章 - 10  trackbacks - 0
    <2009年9月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿(3)

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    jni的幾個基本的性能測試分析

    今天對jvm運行jni做了幾個基本的性能測試,測試的jvm有jdk1.4.2_19、jdk1.5.0_04和jdk1.6.0_14,測試的重復次數都是一億次,測試結果的絕對數值意義不大,僅供參考。
    java調用jni空函數和調用java方法的性能(比較):
    java.version = 1.6.0_14
     Java空方法調用  耗時 329 ms   平均每秒  303951367
     JNI空方法調用   耗時 1531 ms  平均每秒  65316786

    java.version = 1.5.0_04
     java空方法調用  耗時 312 ms   平均每秒  320512820
     JNI空方法調用   耗時 1891 ms  平均每秒  52882072

    java.version = 1.4.2_19
     java空方法調用  耗時 312 ms   平均每秒  320512820
     JNI空方法調用   耗時 3672 ms  平均每秒  27233115
     
     jdk版本越高,JNI調用的性能越好,這點要感謝sun的努力了。
    在jdk1.6下,僅僅是空方法調用,JNI的性能就要比java內部調用慢將近5倍,而在jdk1.4下更是慢了十多倍。

     

    jni里查找class(JNIEnv.FindClass)和fieldid(JNIEnv.GetFieldID)和jni讀取java Field(JNIEnv.GetFieldValue)的性能:
    緩存表示只調用一次,不緩存就是每次都調用。

    java.version = 1.6.0_14
    JNI 字段讀取 (緩存Class=false ,緩存字段ID=false) 耗時 : 79172 ms    平均每秒 : 1263072
    JNI 字段讀取 (緩存Class=true ,緩存字段ID=false)  耗時 : 25015 ms    平均每秒 : 3997601
    JNI 字段讀取 (緩存Class=false ,緩存字段ID=true)  耗時 : 50765 ms    平均每秒 : 1969861
    JNI 字段讀取 (緩存Class=true ,緩存字段ID=true)   耗時 : 2125 ms     平均每秒 : 47058823

    java.version = 1.5.0_04
    JNI 字段讀取 (緩存Class=false ,緩存字段ID=false) 耗時 : 87109 ms    平均每秒 : 1147987
    JNI 字段讀取 (緩存Class=true ,緩存字段ID=false)  耗時 : 32031 ms    平均每秒 : 3121975
    JNI 字段讀取 (緩存Class=false ,緩存字段ID=true)  耗時 : 51657 ms    平均每秒 : 1935846
    JNI 字段讀取 (緩存Class=true ,緩存字段ID=true)   耗時 : 2187 ms     平均每秒 : 45724737

    java.version = 1.4.2_19
    JNI 字段讀取 (緩存Class=false ,緩存字段ID=false) 耗時 : 97500 ms    平均每秒 : 1025641
    JNI 字段讀取 (緩存Class=true ,緩存字段ID=false)  耗時 : 38110 ms    平均每秒 : 2623983
    JNI 字段讀取 (緩存Class=false ,緩存字段ID=true)  耗時 : 55204 ms    平均每秒 : 1811462
    JNI 字段讀取 (緩存Class=true ,緩存字段ID=true)   耗時 : 4187 ms     平均每秒 : 23883448

     查找class和ID(field和method)消耗大量的時間。只是讀取字段值的時間基本上跟上面的JNI空方法是一個數量級。
     而如果每次都根據名稱查找class和field的話,性能要下降高達40倍。
     讀取一個字段值的性能在百萬級上,在交互頻繁的JNI應用中是不能忍受的。
     消耗時間最多的就是查找class,因此在Native里保存class和member id是必要的。
     class和member id在一定范圍內是穩定的,但在動態加載的class loader下,保存全局的class要么可能失效,要么可能造成無法卸載classloader,
     在諸如OSGI框架下的JNI應用還要特別注意這方面的問題。

     在讀取字段值和查找FieldID上,jdk1.4和1.5、1.6的差距是非常明顯的。但在最耗時的查找class上,三個版本沒有明顯差距。

     

     

    基于線程變量(TlsSetValue/TlsGetValue)的JNIEnv讀取和基于JavaVM的JNIEnv讀取(JavaVM.GetEnv)

    JNIEnv讀取 (線程變量)   耗時 : 516 ms      平均每秒 : 193798449

    java.version = 1.6.0_14
    JNIEnv讀取 (JavaVM)     耗時 : 1985 ms     平均每秒 : 50377833

    java.version = 1.5.0_04
    JNIEnv讀取 (JavaVM)     耗時 : 2218 ms     平均每秒 : 45085662

    java.version = 1.4.2_19
    JNIEnv讀取 (JavaVM)     耗時 : 2234 ms     平均每秒 : 44762757


    為什么要做這個JNIEnv讀取測試:
     JavaVM是進程全局有效的,而JNIEnv是線程相關的,
     但JNI編程是可以不用這樣的模式來獲得JNIEnv的,需要在所有相關的函數調用里帶JNIEnv參數。
     在C++編程模式下,大量的對象方法調用都要帶JNIEnv的參數確實不如動態獲得它方便。
     在性能可以接受的范圍內是可以考慮用其他的模式來隨時獲得JNIEnv的。因此我才會做這個測試。

     從上面的測試數據看,用線程變量的性能是優于JavaVM.GetEnv的,而且從相對的數量級上看,個人認為是完全可以接受這種JNIEnv的獲得模式的。

     

    希望以上的測試分析對大家的JNI應用開發和優化有一定的參考價值。

     

    posted on 2009-09-17 05:39 TaoLei 閱讀(4165) 評論(2)  編輯  收藏

    FeedBack:
    # re: jni的幾個基本的性能測試分析 2010-02-24 17:03 rt
    感想LZ,支持原創。  回復  更多評論
      
    # re: jni的幾個基本的性能測試分析 2012-12-31 16:55 tb
    老大,
    基于線程變量(TlsSetValue/TlsGetValue)的JNIEnv讀取,這個方式怎么使用啊???

    看你的測試結果比基于JavaVM的JNIEnv讀取(JavaVM.GetEnv)這個方法給力啊....學習下....老大多多指教啊...  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 一区二区三区免费精品视频| 亚洲精品在线免费观看| 久久精品亚洲综合| 中文字幕无码播放免费| AV激情亚洲男人的天堂国语| 国产亚洲视频在线播放| 国产大片免费网站不卡美女| 女bbbbxxxx另类亚洲| 久久久久亚洲AV成人无码| 麻豆国产VA免费精品高清在线| 精品一区二区三区高清免费观看| 亚洲男女性高爱潮网站| 亚洲国产免费综合| 222www在线观看免费| 一级毛片a免费播放王色| 亚洲人成电影在线天堂| 免费v片在线观看无遮挡| 91av在线免费视频| 美女18毛片免费视频| 亚洲三级视频在线| 337p日本欧洲亚洲大胆裸体艺术| 在线观看免费人成视频色| 天堂在线免费观看| 久久亚洲精品无码网站| 亚洲精品视频在线观看视频| 亚洲精品偷拍视频免费观看| 免费影院未满十八勿进网站| 中文字幕的电影免费网站| 亚洲AV无码XXX麻豆艾秋| 亚洲一区二区成人| 国产亚洲精品无码拍拍拍色欲| 成年在线观看免费人视频草莓| 可以免费观看的毛片| 在线播放国产不卡免费视频| 亚洲综合激情五月色一区| 亚洲人成网www| 亚洲精品亚洲人成在线观看| 内射无码专区久久亚洲| 日韩免费a级毛片无码a∨ | 亚洲天堂中文字幕在线观看| 亚洲中文字幕在线第六区|