亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

java語言

JAVA JNI函數(shù)的注冊過程介紹

時間:2024-09-16 15:08:09 java語言 我要投稿
  • 相關(guān)推薦

JAVA JNI函數(shù)的注冊過程介紹

  我們在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.弊端:

 、贂鴮懞懿环奖悖驗镴NI層函數(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)注冊的弊端。

【JAVA JNI函數(shù)的注冊過程介紹】相關(guān)文章:

java構(gòu)造函數(shù)調(diào)用技巧10-26

java調(diào)用c函數(shù)的實例09-16

Java面向過程教程10-05

java構(gòu)造函數(shù)實現(xiàn)代碼示例08-23

Java程序調(diào)用C/C++語言函數(shù)的方法07-31

wps常用函數(shù)介紹05-30

Java 循環(huán)結(jié)構(gòu)介紹08-13

Java語言的優(yōu)點介紹07-01

介紹Java array接口10-06

JAVA語言的介紹及發(fā)展10-06