java jni 簡介

JNIJava Native Interface的縮寫,它提供了若干的API實現了Java和其他語言的通信(主要是C&C++)。

JNI原理

JVM將JNI接口指針傳遞給本地方法,本地方法只能在當前線程中訪問該接口指針,不能將接口指針傳遞給其它線程使用。在VM中 JNI接口指針指向的區域用來分配和存儲線程本地數據。當Java代碼調用本地方法時,VM將JNI接口指針作爲參數傳遞給本地方法,當同一個Java線程調用本地方法時VM保證傳遞給本地方法的參數是相同的。不過,不同的Java線程調用本地方法時,本地方法接收到的JNI接口指針是不同的。

 

JNI副作用

一旦使用JNI,JAVA程序就喪失了JAVA平臺的兩個優點:

1、程序不再跨平臺。要想跨平臺,必須在不同的系統環境下重新編譯本地語言部分。

2、程序不再是絕對安全的,本地代碼的不當使用可能導致整個程序崩潰。一個通用規則是,你應該讓本地方法集中在少數幾個類當中。這樣就降低了JAVA和C之間的耦合性。

 

JNI設計目的

標準的java類庫可能不支持你的程序所需的特性。或許你已經有了一個用其他語言寫成的庫或程序,而你希望在java程序中使用它。

你可能需要用底層語言實現一個小型的時間敏感代碼,比如彙編,然後在你的java程序中調用這些功能。

 

細節

用Java代碼調用C\C++代碼時候,肯定會有參數數據的傳遞。兩者屬於不同的編程語言,在數據類型上有很多差別,應該要知道他們彼此之間的對應類型。例如,儘管C擁有int和long的數據類型,但是他們的實現卻是取決於具體的平臺。

 

參考:

http://blog.csdn.net/jiangwei0910410003/article/details/17465085

http://www.cnblogs.com/shaweng/p/4013320.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章