Когда мне следует использовать разрешение имен вместо RegisterNatives в JNI?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Когда мне следует использовать разрешение имен вместо RegisterNatives в JNI?

Сообщение Anonymous »

В System.c функция JVM, соответствующая Java System.currentTimeMillis(), регистрируется с помощью RegisterNatives.

Напротив, 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);
}
Используются оба подхода, но что определяет, какой из них использовать?


Подробнее здесь: https://stackoverflow.com/questions/797 ... ves-in-jni
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»