[讨论] 关于Dalvik VM 支持的JNI与其解释器之间的关系

pzz2011 2014-10-26
大家好,一个虚拟机实例中包含了解释器,在创建一个虚拟机实例的的过程中(过程中涉及各种线程),解释器感觉都还没有创建完,为什么就可以利用JNI机制实现Java代码与native code之间的‘沟通'了呢?    —.-!!表达有点差劲,我自己都不是很明白自己在说什么,抱歉
RednaxelaFX 2014-10-27
楼主的意思是为啥JVM都还没初始化好,JNI就可以工作了呢?

是的话答案很简单:JNI有很多部分,其中有些部分并不需要事先已经创建好JVM。

要区分需要已经创建好JVM与不需要的JNI API很简单:参数里要传 JNIEnv* 或者 JavaVM* 的就是必须事先创建好JVM的,而不传这两种参数的API则不需要。

最典型的不需要传上述两种参数的API就是JNI Invocation API中的 JNI_CreateJavaVM() 函数。它的功能就是创建一个JVM实例。这总不可能要求事先已经有一个创建好的JVM实例才能执行对吧
pzz2011 2014-10-28
太厉害了,居然知道我表达的意思了—.-!!!  非常感谢您

不过我还是比较关心那部分可以 不以来与JNI机制就可以跑了!!
一直对这个 ‘鸡’和‘蛋’的故事不理解。我记得linux还是glibc编译的过程中也有类似的问题存在。但是我不理解[对那块也没经验]

希望得到您的回复!Thx!
Global site tag (gtag.js) - Google Analytics