1. 程式人生 > >Java基礎(一)Java本地方法

Java基礎(一)Java本地方法

1、Java本地方法概念

Java中的方法分為兩種:Java方法和本地方法。

Java方法由Java語言編寫,編譯成位元組碼,儲存在class檔案中。

本地方法由其他語言編寫,編譯成與處理器相關的機器程式碼,本地方法儲存在動態連結庫(如ddl中)。

本地方法的存在的意義,主要在於Java應用需要與JVM進行互動,當Java需要與作業系統或者某些硬體交換資訊時,就需要用到本地方法。使用JNI能讓Java與本地語言互動,但也意味著喪失了跨平臺性。

2、Java本地方法呼叫原理

JNI(Java Native Interface)是Java呼叫非Java方法的入口。理解JNI從虛擬機器層面來看,JVM主要使用C/C++和少量彙編實現,執行Java位元組碼時如果遇到Native方法,則從JVM中尋找對應的C/C++函式,對應的函式會被註冊到JVM中。

執行過程如下:

(1)Java通過 System.loadLibrary 方法載入動態庫,該方法內呼叫 ClassLoader.loadLibrary 方法,載入時通過系統設定的絕對路徑或特定目錄下尋找動態庫。

(2)對於linux,通過dlopen函式開啟動態庫,載入到記憶體中,再通過dlsym函式獲取動態庫中的函式指標,然後呼叫到特定函式。

簡單說,就是JVM負責將動態庫載入到記憶體,Java執行引擎執行到本地方法時找到對應的函式,完成本地方法的呼叫。

 

參考文章:

https://blog.csdn.net/wi__wi/article/details/51085907

https://blog.csdn.net/wangyangzhizhou/article/details/74931733