Java基礎(一)Java本地方法
阿新 • • 發佈:2018-12-04
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