ART没有了Java虚拟机,能支持的了JNI吗?比如Java和C++互调用,还有ART不用解释器了那有没有可能放弃Java呢?

关注者
66
被浏览
3667
槽点很多嗯。

ART本质上仍然是一个Java虚拟机。它所支持的Dalvik指令集跟之前Dalvik VM所支持的一样,而该指令集是JVM指令集的一种机械映射,两个指令集之间高度对应。

ART当然还支持JNI。它对JNI的支持主要在源码的runtime/jni_*文件里实现,例如 runtime/jni_internal.cc

ART虽然主要通过AOT编译支持Java的运行,但仍然带有解释器。
ART会自动选择一部分Java方法使用AOT编译的方式,在程序执行前就编译生成好相应的机器码,到真的运行时只需要执行那些机器码即可;但是没有被选上做AOT编译的Java方法则仍然需要由解释器来执行。
解释器的实现在 runtime/interpreter。最近还多了个用汇编写的优化版解释器,在 runtime/interpreter/mterp ,本质上就是把Dalvik VM的汇编写的解释器移植到了ART上。
另外ART其实从一开始就有计划支持JIT编译,只是最初发布的时候还没做到这块。现在的代码已经开始有一些初步实现了,其接口代码在 compiler/jit

至于ART上能不能用Java以外的编程语言,基本上原本Dalvik支持什么ART就支持什么——不想要Java的话其它JVM语言许多都能行,Groovy、Clojure、Scala啥的嗯。