JNI原理

434 阅读1分钟

Java Native Interface.

使用场景:

  • 需要调用Java语言不支持的依赖于操作系统平台特性的一些功能。
  • 为了整合一些以前的非Java语言开发的系统。
  • 为了节省程序的运行时间,必须采用其他语言(比如C/C++)来提升运行效率。

Native方法注册

  • 静态注册
  • 动态注册

数据类型的转换

  • 基本数据类型的转换
  • 引用数据类型的转换

方法签名

  • 将参数类型和返回值类型组合在一起作为方法签名

解析JNIEnv

JNIEnv是Native世界中Java环境的代表,通过JNIEnv *指针就可以在Native世界中访问Java世界的代码进行操作,它只在创建它的线程中有效,不能跨线程传递,因此不同线程的JNIEnv是彼此独立的。

引用类型

本地引用(Local References):自动释放,不能跨线程,受JVM管理。

全局引用(Global References):手动释放,跨线程,不受JVM管理。

弱全局引用(Weak Global References):类似全局引用,可被GC回收,GC回收后指向NULL。