上一篇:内存溢出(OOM)故障排查—JProfiler

  不知道大家在学习线程的时候有没有注意到Thread这个类中有下面这样一些代码:

Native关键字_学习

Native关键字_学习_02
  大家如果看了Thread类的源码的时候就会发现,Thread就是一个普通的class类,

Native关键字_学习_03
为什么在这个类中可以定义一个类似于接口的方法呢?
Native关键字_学习_04
我们自己来定义一个这样的方法就会报错:
Native关键字_学习_05
如果我们加上native关键字的话,情况就不一样了:
Native关键字_学习_06
加上native关键字的时候,就不会再报错了。

1.native关键字的作用?

  Native关键字是java编程语言用来调用底层C语言库的。

  虽然现在Java语言非常火,但是最开始是C/C++的天下,后来java吸收了一些好的东西,摒弃了一些不好的东西,逐渐开始走红。也就是说,java底层还是会有一些C/C++(jvm就是C++实现的)的东西,此时java如果想要去调用这些不是java语言实现的代码时就需要使用到Native关键字。

  简而言之,使用native关键字修饰的方法表示此方法不是由java实现的,所以在java中看不到这个方法具体是怎么实现的。

  在之前的一篇文章:

JVM(一)—基础概念

里面有一张jvm的概况图:
Native关键字_学习_07
上图中的Native Method Interface会和JVM进行交互,说白了就是java代码会调用java的底层方法,这也就是我们常说的JNI(Java Native Interface)