一、用到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程序