如我们所知,JNIEnv是指向VM的指针。 顾名思义,JavaVM本身就是一个VM。 他们之间有什么区别吗?
发布于 2017-11-28 11:30:47
我们知道,JNIEnv是指向VM的指针。
事实并非如此。
JNIEnv是struct _JNIEnv的别名,它反过来包含JNINativeInterface*和一组方法(FindClass、GetMethodID、NewLocalRef等)。
当通过JNIEnv*调用方法时,调用被委托给JNINativeInterface实例,该实例包含指向运行时提供的实际实现的函数指针。
另一方面,JavaVM是struct _JavaVM的别名,它包含JNIInvokeInterface*。JNIInvokeInterface有一组与JNINativeInterface不同的方法(例如,GetEnv、AttachCurrentThread)。
所以他们有不同的目的。JavaVM*的主要目的是允许您获得对当前执行线程有效的JNIEnv*。JNIEnv*是解析Java类、调用Java方法等所需的。
https://stackoverflow.com/questions/47529232
复制相似问题