为了加深对java本地方法的理解,在网上找到了该方法的C源码部分,如下:
static JNINativeMethod methods[] = {
{"hashCode", "()I", (void *)&JVM_IHashCode},
{"wait", "(J)V", (void *)&JVM_MonitorWait},
{"notify", "()V", (void *)&JVM_MonitorNotify},
{"notifyAll", "()V", (void *)&JVM_MonitorNotifyAll},
{"clone", "()Ljava/lang/Object;", (void *)&JVM_Clone},
};
JNIEXPORT void JNICALL
Java_java_lang_Object_registerNatives(JNIEnv *env, jclass cls)
{
(*env)->RegisterNatives(env, cls,
methods, sizeof(methods)/sizeof(methods[0]));
}
很简单,就是对几个本地方法进行注册(也就是初始化java方法映射到C的方法)。
这里需要注意的是很多类里都有这个方法,但是执行的目标是不相同的,例如在我另一篇《System与Runtime源码解析》System里的这个方法,就不一样了。