★01.介绍

Java平台与宿主环境

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

JNI的角色

  • JNI 是一种双向接口,既允许 Java应用程序 调用原生代码,同时也允许原生代码调用 Java 代码。
    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应用程序大多数时间都消耗在图形渲染上,你会想要将这部分渲染代码使用汇编语言实现来达到最好的性能。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容