JNI之一:什么是JNI (Java Native Interface)

在这里插入图片描述
JNI,即Java本地接口 (Java Native Interface),它是连接Java代码本地代码之间的桥梁,其中,本地代码可以是C,C++,Fortran等语言编写的。JNI允许我们在Java代码中调用本地代码,也允许本地代码调用Java代码。

我们都知道,在Java中存在本地方法(native method),这种方法用native关键字进行修饰。本地方法底层是用C/C++语言实现的。调用本地方法和调用普通的Java方法的语法一样。

Java代码会被编译成平台无关的字节码,而用C/C++编写的本地方法实现则不是编译成平台无关的格式,而是编译成平台相关共享链接库 (shared library),然后被加载进JVM中。在Windows系统中,共享链接库是.dll格式;在Linux系统中,共享链接库是.so格式。

这也就意味着,当我们的Java代码中用到本地方法后,就不能保证所编写Java程序的可移植性了,除非我们为所有的目标平台都编写一份本地代码实现。

既然本地代码会影响Java程序的可移植性,那么为什么还需要本地代码呢?原因如下:

  • Java应用需要依赖某些平台相关的特性。例如,Java中的线程底层实际上是基于操作系统内核线程的,不同操作系统内核线程的实现都不相同,因此Java线程的某些操作必须用本地方法来实现。
  • 性能原因。Java应用中的某些部分可能对性能和速度要求很高,这部分代码可以采用C/C++来编写。
  • 等等

一般来说,使用本地方法应该是我们的最后一个选择,不到万不得已的情况下并不推荐使用本地方法。

在本系列后续的文章中,将会介绍如何使用JNI编写代码。

猜你喜欢

转载自blog.csdn.net/qq_29328443/article/details/107289099