JNI—JNIEnv和JavaVM之间的区别

JNI—JNIEnv和JavaVM之间的区别,java,java-native-interface,Java,Java Native Interface,正如我们所知,JNIEnv是指向VM的指针 顾名思义,JavaVM本身就是一个VM 他们之间有什么区别吗 正如我们所知,JNIEnv是指向VM的指针 事实并非如此。 JNIEnv是struct\u JNIEnv的别名,它依次包含一个jniationInterface*和一组方法(FindClass,GetMethodID,NewLocalRef等)。 当您通过JNIEnv*调用方法时,该调用被委托给jniativeinterface实例,该实例包含指向运行时提供的实际实现的函数指针 另一方面,J

正如我们所知,JNIEnv是指向VM的指针

顾名思义,JavaVM本身就是一个VM

他们之间有什么区别吗

正如我们所知,JNIEnv是指向VM的指针

事实并非如此。
JNIEnv
struct\u JNIEnv
的别名,它依次包含一个
jniationInterface*
和一组方法(
FindClass
GetMethodID
NewLocalRef
等)。
当您通过
JNIEnv*
调用方法时,该调用被委托给
jniativeinterface
实例,该实例包含指向运行时提供的实际实现的函数指针

另一方面,
JavaVM
struct\u JavaVM
的别名,它包含一个
JNIInvokeInterface*
。与
jniinaveinterface
相比,
JNIInvokeInterface
有一组不同的方法(例如
GetEnv
AttachCurrentThread


所以他们有不同的目的。
JavaVM*
的主要目的是允许您获得对当前执行线程有效的
JNIEnv*
JNIEnv*
是解析Java类、调用Java方法等所需的

正如我们所知,JNIEnv是指向VM的指针

事实并非如此。
JNIEnv
struct\u JNIEnv
的别名,它依次包含一个
jniationInterface*
和一组方法(
FindClass
GetMethodID
NewLocalRef
等)。
当您通过
JNIEnv*
调用方法时,该调用被委托给
jniativeinterface
实例,该实例包含指向运行时提供的实际实现的函数指针

另一方面,
JavaVM
struct\u JavaVM
的别名,它包含一个
JNIInvokeInterface*
。与
jniinaveinterface
相比,
JNIInvokeInterface
有一组不同的方法(例如
GetEnv
AttachCurrentThread


所以他们有不同的目的。
JavaVM*
的主要目的是允许您获得对当前执行线程有效的
JNIEnv*
JNIEnv*
是解析Java类、调用Java方法等所需的