★01.介绍

Java平台与宿主环境

  • Java平台 是一个编程环境,包括一个 Java虚拟机 和一套 Java API
  • Java虚拟机 可以使得 Java应用程序 不用考虑与 宿主环境(操作系统) 的兼容性问题,保证了 Java应用程序宿主环境(操作系统) 的隔离。
  • Java应用程序 使用 Java 编写,被编译为可以在 Java虚拟机 上运行的二进制格式,所以只要 宿主环境(操作系统) 能运行 Java虚拟机
  • 原生应用使用 C/C++ 这样的原生编程语言编写,编译成为 宿主环境(操作系统) 相关的字节码。

JNI的角色

  • JNI 是一种双向接口,既允许 Java应用程序 调用原生代码,同时也允许原生代码调用 Java 代码。
    ★01.介绍_第1张图片
    JNI的角色

使用JNI的潜在风险

  • 使用了 JNIJava应用程序 便丢失了 可移植性
  • Java 是类型安全的,但是 C/C++ 则不是,一个原生方法的运行时错误,可能让整个程挂掉。

使用JNI的场景

  • 若不选择 JNI ,可以使用以下几种方式来允许 Java应用程序 与其他语言完成的应用程序进行通信:
    1. 可以通过TCP/IP连接或者通过其他IPC通信机制与原生应用进行通信。
    2. 可以通过JDBC连接到一个传统的数据库上。
    3. 可以使用Java IDL API等分布式对象策略的优势。
  • 上述几种方式主要利用了 进程隔离 甚至是 设备隔离 来避免了原生程序的错误传递到 Java应用程序
  • 对于以下几种场景, Java应用程序 和原生代码存在于相同进程空间是有必要的,这也是 JNI 的价值所在:
    1. 一个应用程序想使用一些 Java API 不支持文件操作,而通过另一个进程操作文件又是繁杂且低效的。
    2. 一个自身跨进程实现的应用可能导致不可接受的内存占用,尤其是当这些进程需要运行在同一台宿主机器上时候。
    3. 一个3D应用程序大多数时间都消耗在图形渲染上,你会想要将这部分渲染代码使用汇编语言实现来达到最好的性能。

你可能感兴趣的:(★01.介绍)