# Java native 关键字

**URL:** <https://www.isharkfly.com/t/java-native/14878>\
**Category:** 程序语言\
**Tags:** java\
**Created:** [September 13, 2023, 3:01am UTC](https://www.isharkfly.com/t/java-native/14878 "2023-09-13T03:01:57Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [September 13, 2023, 3:01am UTC](https://www.isharkfly.com/t/java-native/14878/1 "2023-09-13T03:01:57Z")

</div>

如你在看 JDK 的源代码的时候，大概率会看到很多方法使用了 native 关键字。

下面是 String 对象 JDK 中的源代码，就带有了一个 native 关键字。

 ![2023-09-12_22-50-44](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/f/f1c2893dc57896f5d0ed508e3ec657a7ad0dbfa5.png)

## native 是干什么用的

简单来说就是 Java 的 native 方法的实现不是用 Java 实现的，可能在其他语言里面。

一个 Native Method 就是一个 java 调用非 java 代码的接口。

一个Native Method是这样一个java的方法：该方法是一个原生态方法，方法对应的实现不是在当前文件，而是在用其他语言（如C和C++）实现的文件中。

使用 native 关键字说明这个方法是原生函数，也就是这个方法是用C/C++语言实现的，并且被编译成了DLL，由java去调用。

JVM 中很多的底层实现都是使用 C 实现的。

看看 openj9 的源代码就知道了。

例如下图上面 openj9 中的 gc，就是 C 实现的。

 ![2023-09-12_22-55-45](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/a/a39ca3a9ff32417210f1a9a5198001c1933760ff.png)

JDK 在调用上面一些实现的时候，显然是调用了外部的动态库等，所以我们用 native 在这里标记下，表示具体实现在 JVM 里面。

## 实现

具体的实现是通过 JNI 实现的。

JNI 的全称为 Java Native Interface，一句话来说就是Java的本地接口，和我们常见的很多Java方法，很多实现是由Java本身来实现的，有的时候还需要本地方法来提供相关的功能。

 ![image](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/7/710afd362d358dac6c2ff8c630db251ee644cb03.png)

通过 JNI 就可以实现调用了。

在这里 native 只是在 JDK 里面标记下。
