关于安卓虚拟机
gpu吧
全部回复
仅看楼主
level 13
时至今日,还有不少人在纠结安卓虚拟机的问题,我以个人的理解再总结一下。
安卓有三种运行环境,已弃用的Dalvik,现在在用的ART,和调用本地代码的JNI
Dalvik:配合JIT运行,执行DEX文件
Dalvik执行DEX字节码,配合JIT把执行频率高的代码动态转译成机器码再执行。缺陷是一,每次运行程序都需要重新编译,二,转译的过程也会占用一定时间,所以整体效率还是不如本地代码。Dalvik已成过去式,所以就不多提了。
ART:配合AOT,执行OAT文件
AOT,安装时就由ART将类和方法编译成本地机器码保存在oat文件中
程序执行时,oat被加载到内存中,ART找到相应的类方法对应的本地机器指令并执行。
也就是说ART提供这样一个“找”的方法和过程。除此之外,ART也和Dalvik一样提供Java虚拟机接口,垃圾回收,Java核心类库调用,所以ART本质也是虚拟机。但是模式已经非常接近C/C++那样的本地执行了。
JNI:调用C/C++本地代码
使用NDK进行C/C++开发,然后通过JNI调用编译好的SO文件。NDK适用的软件类型并不多,但是有一种开发基本上离不开NDK,就是我们最熟悉不过的游戏。多数引擎都是用C++,而且安卓中开发OpenGL ES必须用C/C++,因为虚拟机运行时不支持直接调用OpenGL。
2016年12月06日 13点12分 1
1