native方法的调用及JNI
native方法
参考 JVM规范,6.5 Instructions 其中的指令集:
- invokestatic
- invokevirtual
其中就有关于方法是 native 方法的调用机制的描述。 其中提到了符号链接的 Binging。
JNI
JNI 有关 注册 native 方法,应该就和 符号链接的绑定 有关。
1 | private static native void registerNatives(); |
native 方法的实现
1 | // Thread.c |
同时从 jdk/src/share/native/java/lang/Thread.c 的实现来看
实现JNI接口有两种方法,
直接实现
registerNatives 接口自身就是一个 native 方法,它是直接在 Thread.c 中实现
通过 RegisterNatives 注册
其它的方法,例如 start0 由于定义在其它地方,所以使用 RegisterNatives 通过注册的形式实现。
JVM
关于 native 方法的调用 和 JNI 方法调用的 实现,其实都和 JVM 的实现有关,所以 需要系统学习 JVM 的实现。