一、用到JNI的情況
△在java程序中複用以前寫過的c/c++代碼
△ 實現自己的java虛擬機
△學習不同語言如何進行協作,尤其是如何實現垃圾回收和多線程
△ 把一個虛擬機實現整合到用c/c++寫的程序中
二、平臺和系統環境
系統環境指本地操作系統環境。本地程序使用c/c++來編寫,被編譯成只能在本地系統環境下運行的二進制代碼,並和本地庫連接在一起。
三、JNI扮演的角色
作爲虛擬機實現的一部分,允許JAVA和本地代碼雙向交互
1.1 、JNI的副作用:
△一旦使用就失去了跨平臺的特性
△本地代碼的不當可能導致整個程序的崩潰
通用規則:讓本地方法集中在少數的幾個類中,從而降低JAVA和C之間的耦合性
1.2、避免使用JNI的方案
△使用TCP/IP或者IPC使JAVA和本地程序進行交互
△用JAVA連接本地數據庫時,使用JDBC提供的API
△JAVA程序可以使用分佈式對象技術,如JAVA IDL API (⊙_⊙)?
共同點:JAVA和C處於不同的線程或者機器上,本地程序的崩潰不會影響到JAVA程序