本地方法栈
这里的本地方法栈 存的都是被 native 关键字 标记的方法的引用!
真正的本地方法 需要通过 JNI(Java Native Interface)去本地方法库中去调用。
引入
当我们去查看 线程启动 调用的 start()方法时,会发现线程的真正启动是 调用了 start0() 这个方法。
public synchronized void start() {
/**
* This method is not invoked for the main method thread or "system"
* group threads created/set up by the VM. Any new functionality added
* to this method in the future may have to also be added to the VM.
*
* A zero status value corresponds to state "NEW".
*/
if (threadStatus != 0)
throw new IllegalThreadStateException();
/* Notify the group that this thread is about to be started
* so that it can be added to the group's list of threads
* and the group's unstarted count can be decremented. */
group.add(this);
boolean started = false;
try {
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
/* do nothing. If start0 threw a Throwable then
it will be passed up the call stack */
}
}
}
private native void start0();
这种写法相当奇怪,因为正儿八经的Class 类中根本不能写类似于 抽象方法的东西(没有实现代码块),那么这其中的关键 就只能是 native 关键字了。
来源
native : 凡是带了 native 关键字的,说明Java的 作用范围达不到了,要去调用 底层C语言的库!
JNI作用:扩展 Java 的使用,融合不同的编程语言为 Java 所用,,最初是为了调用 C 和 C++的。
Java 诞生之初,C语言 和 C++ 是 最为主体的 编程语言,要想从中立足,就必须能和他们融为一体,借此来扩大自己的生态。就此,本地方法栈 就在 JVM 中孕育而生了。