Напротив, System.identityHashCode(Object) вызывает функцию JVM напрямую на основе соглашения об именах.
https://github.com/openjdk/jdk/blob/9b9 ... .c#L39-L59
Код: Выделить всё
/* Only register the performance-critical methods */
static JNINativeMethod methods[] = {
{"currentTimeMillis", "()J", (void *)&JVM_CurrentTimeMillis},
{"nanoTime", "()J", (void *)&JVM_NanoTime},
{"arraycopy", "(" OBJ "I" OBJ "II)V", (void *)&JVM_ArrayCopy},
};
JNIEXPORT void JNICALL
Java_java_lang_System_registerNatives(JNIEnv *env, jclass cls)
{
(*env)->RegisterNatives(env, cls,
methods, sizeof(methods)/sizeof(methods[0]));
}
JNIEXPORT jint JNICALL
Java_java_lang_System_identityHashCode(JNIEnv *env, jobject this, jobject x)
{
return JVM_IHashCode(env, x);
}
Потому что я думал, что JVM_IHashCode также можно зарегистрировать в RegisterNatives.
Какова цель использования этих двух разных подходов?
Подробнее здесь: https://stackoverflow.com/questions/797 ... ode-handle
Мобильная версия