JNI究竟是啥 (jni是什么)
本文目录导航:
JNI究竟是啥
JNI,全称为Java Native Interface,是Java的本地接口,旨在提供Java与本地代码之间的桥梁。
在Java的开发环节中,咱们经常能听到它的名字,但却很少有人对其有深化的了解。
在日常的Java开发中,咱们经常提到Java的跨平台和可移植性,但有时刻平台特有的配置在Java中成功起来就显得不够便利。
此时,JNI就显得尤为关键。
它准许开发者在Java中调用本地代码,以成功对特定平台特有配置的访问。
JNI中的“native”润色的方法,实践上就是咱们经常在Java源码中遇到的“native”方法。
这类方法没有详细成功,只是提供一个接口,期待本地代码启动成功。
例如,Object类中的hashCode方法,就是一个典型的native方法,它为咱们提供了计算对象哈希值的基础。
那么,JNI是如何成功这个配置的呢?答案是经过C或C++言语来成功。
JNI的成功方法与Java方法栈不同,它对应的是本地方法栈,这里蕴含了针对特定平台的一些C成功的方法。
JVM是如何将这些本地方法加载到本地方法栈中的呢?这就是JNI的外围所在。
JNI的成功分为“主动型”和“主动型”两种。
在主动型中,JVM会依据native方法去寻觅对应的C言语成功。
JVM会依照必定的命名规定来查找,确保Java与C言语之间的兼容性。
查找规定理论遵照Java_扫尾,前面跟着包名和方法名的格局。
例如,一个名为Java_com_example_MyClass的方法,其对应的C函数或许为Java_com_example_MyClass_方法名。
主动型则更为灵敏,它依赖于一个主动型的C函数方法成功。
在这种状况下,JVM在加载时会先加载一个名为registerNatives的方法,该方法位于类的静态块中,将其中的native方法加载出去,即使它们没有遵照命名规定。
关于JNI的API,Oracle提供了一份详细的文档,但未启动与其余版本如OpenJDK的比拟。
JNI也触及渣滓回收,生成的对象理论不会随便被回收,但在本地方法前往后,部分援用的对象会被标志为可回收,为渣滓回收提供线索。

jni是什么
JNI,即Java Native Interface的简称,它的中文含意是Java与本地代码的交互接口。
自Java 1.1版本起,JNI就被归入Java平台的外围组成部分,它为Java程序与非Java言语编写的代码提供了桥梁。
最后,JNI关键针对C和C++等编译型言语启动设计,但实践上,只需是支持JNI调用商定的言语,如C#、Python等,都可以与Java无缝集成。
JNI的引入,极大地增强了Java的灵敏性和性能后劲,使得Java程序能够应用其余言语的长处来裁减其配置。
经过JNI,Java开发者能够调用操作系统底层的API,解决系统资源,或许应用高性能的C/C++库,而不用齐全依赖Java的性能。
这种模式在须要高性能计算或底层操作的场景下尤其有用,比如图形解决、游戏开发等。
因此,JNI不只是Java平台的关键补充,也是跨言语编程的弱小工具。
Java本地接口上班模式有哪些呢?
Java本地接口(Java Native Interface,JNI)准许Java程序与本地代码和库启动交互,从而裁减其配置或性能。
JNI上班原理触及经常使用独立的.c或文件编写本地函数,并经过JNI函数与Java虚构机(JVM)启动通讯。
这些函数接纳JNIEnv指针、jobject指针以及Java方法定义的参数。
本地函数经过JNI函数成功,JNIEnv指针蕴含与JVM交互及与Java对象单干所需的一切函数。
经过JNI,本地代码可以访问Java类库中封装的配置,如文件输入输入、音频解决等。
在JNI中,本地方法由方法加载,该方法接纳类库称号,系统据此转换为本地类库称号。
本地方法在不同Java线程中或许接纳到不同的JNI界面指针,但同一线程中的调用则传递相反的指针。
数据类型映射方面,基本类型如整型、字符等在Java和本地代码间间接拷贝,自定义Java对象则经过援用传递。
字符串和数组类型的转换较为复杂,须要正确经常使用环境指针env来操作Java对象,防止形成解体。
经过JNI,Java程序能够调用本地代码和库,从而增强其配置和性能,同时还能访问经常使用其余言语编写的程序。
这一机制使得开发者能够充沛应用不同言语的特性,成功跨言语集成,同时确保代码的平台有关性和安保性。