欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA JNI函數(shù)的注冊過程詳細(xì)介紹

 更新時間:2016年11月04日 11:48:29   投稿:lqh  
這篇文章主要介紹了JAVA JNI函數(shù)的注冊過程詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下

JAVA JNI函數(shù)的注冊過程詳細(xì)介紹

我們在java中調(diào)用Native code的時候,一般是通過JNI來實現(xiàn)的,我們只需要在java類中加載本地.so庫文件,并聲明native方法,然后在需要調(diào)用的地方調(diào)用即可,至于java中native方法的具體實現(xiàn),全部交給了Native層。我們要在java中正確地調(diào)用到本地代碼中對應(yīng)函數(shù)的前提是什么呢?答案就是通過一定的機制建立java中native方法和本地代碼中函數(shù)的一一對應(yīng)關(guān)系,那么這種機制是什么呢?就是JNI函數(shù)的注冊機制。

  JNI函數(shù)的注冊有兩種方式,一種是靜態(tài)注冊方式,另一種是動態(tài)注冊方式。下面我們來分別介紹這兩實現(xiàn)方式。

  一.靜態(tài)注冊。

  1.實現(xiàn)原理:根據(jù)函數(shù)名來建立java方法和JNI函數(shù)間的一一對應(yīng)關(guān)系。

  2.實現(xiàn)過程:

   ?、倬帉慾ava代碼;

   ?、诰幾gjava代碼,生成.class文件;

   ?、塾眠^javah指令,利用生成的.class文件生成JNI的.h文件;

   ?、苌珊蟮腏NI頭文件中包含了Java函數(shù)在JNI層的聲明;

  3.弊端:

   ?、贂鴮懞懿环奖?,因為JNI層函數(shù)的名字必須遵循特定的格式,且名字特別長;

    ②會導(dǎo)致程序員的工作量很大,因為必須為所有聲明了native函數(shù)的java類編寫JNI頭文件;

   ?、鄢绦蜻\行效率低,因為初次調(diào)用native函數(shù)時需要根據(jù)根據(jù)函數(shù)名在JNI層中搜索對應(yīng)的本地函數(shù),然后建立對應(yīng)關(guān)系,這個過程比較耗時。

  二.動態(tài)注冊。

  1.實現(xiàn)原理:直接告訴native函數(shù)其在JNI中對應(yīng)函數(shù)的指針;

  2.實現(xiàn)過程:

   ?、倮媒Y(jié)構(gòu)體JNINativeMethod保存Java Native函數(shù)和JNI函數(shù)的對應(yīng)關(guān)系;

   ?、谠谝粋€JNINativeMethod數(shù)組中保存所有native函數(shù)和JNI函數(shù)的對應(yīng)關(guān)系;

   ?、墼贘ava中通過System.loadLibrary加載完JNI動態(tài)庫之后,調(diào)用JNI_OnLoad函數(shù),開始動態(tài)注冊;

   ?、躂NI_OnLoad中會調(diào)用AndroidRuntime::registerNativeMethods函數(shù)進行函數(shù)注冊;

   ?、軦ndroidRuntime::registerNativeMethods中最終調(diào)用jniRegisterNativeMethods完成注冊。

  3.優(yōu)點:克服了靜態(tài)注冊的弊端。

       感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 如何動態(tài)修改JavaBean中注解的參數(shù)值

    如何動態(tài)修改JavaBean中注解的參數(shù)值

    這篇文章主要介紹了如何動態(tài)修改JavaBean中注解的參數(shù)值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Spring Boot 通過 Mvc 擴展方便進行貨幣單位轉(zhuǎn)換的代碼詳解

    Spring Boot 通過 Mvc 擴展方便進行貨幣單位轉(zhuǎn)換的代碼詳解

    這篇文章主要介紹了Spring Boot 通過 Mvc 擴展方便進行貨幣單位轉(zhuǎn)換,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • java解析xml之jdom解析xml示例分享

    java解析xml之jdom解析xml示例分享

    JDOM是專門為Java打造的API,JDOM采用了Java中的Collection架構(gòu)來封裝集合,是Java愛好者更加熟悉的模式,下面看使用示例
    2014-01-01
  • java 中迭代器的使用方法詳解

    java 中迭代器的使用方法詳解

    這篇文章主要介紹了java 中迭代器的使用方法詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • SpringMVC 實現(xiàn)用戶登錄實例代碼

    SpringMVC 實現(xiàn)用戶登錄實例代碼

    這篇文章主要介紹了SpringMVC 實現(xiàn)用戶登錄實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java中Map轉(zhuǎn)List及List轉(zhuǎn)Map的方法(簡單好用!)

    Java中Map轉(zhuǎn)List及List轉(zhuǎn)Map的方法(簡單好用!)

    這篇文章主要給大家介紹了關(guān)于Java中Map轉(zhuǎn)List及List轉(zhuǎn)Map的相關(guān)資料,可以使用Java 8的Stream API將Java Map轉(zhuǎn)換為List,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 基于SpringBoot實現(xiàn)上傳2種方法工程代碼實例

    基于SpringBoot實現(xiàn)上傳2種方法工程代碼實例

    這篇文章主要介紹了基于SpringBoot實現(xiàn)上傳工程代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Mybatis下的SQL注入漏洞原理及防護方法解析

    Mybatis下的SQL注入漏洞原理及防護方法解析

    SQL 注入是發(fā)生在 Web 程序中數(shù)據(jù)庫層的安全漏洞,是網(wǎng)站存在最多也是最簡單的漏洞,在實際項目中,即使使用了 Mybatis 框架,但仍然有可能因為編碼人員安全意識不足而導(dǎo)致 SQL 注入問題,這篇文章主要介紹了Mybatis下的SQL注入漏洞原理及防護方法?,需要的朋友可以參考下
    2022-11-11
  • Spring boot集成spring session實現(xiàn)session共享的方法

    Spring boot集成spring session實現(xiàn)session共享的方法

    這篇文章主要介紹了Spring boot集成spring session實現(xiàn)session共享的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • springboot程序啟動慢-未配置hostname的解決

    springboot程序啟動慢-未配置hostname的解決

    這篇文章主要介紹了springboot程序啟動慢-未配置hostname的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論