JVM、Dalvik和ART的区别
总的来说传统的Java虚拟机是JVM,后来Google自己又专门为Android平台设计了Java虚拟机,那就是Dalvik和ART,而ART又是对Dalvik的全面升级。
现在问题集中在了Dalvik与ART的身上了,这两者都是Android
平台上虚拟机,Android应用程序使用的是后缀名为.apk
的压缩文件,我们首先来分析一下Apk文件。Apk文件主要包括一些资源文件,清单文件,和classes.dex
文件(classes中如果方法除超过65536会导致打包失败,这时可以使用MutiDex分包,其主要原理就是增加classes文件),classes.dex文件由java字节码
优化打包而成,接下来分两种情况:
-
Dalvik虚拟机:在Dalvik中,每次打开应用程序,Dalvik都会读取classes.dex文件并解释执行,Dalvik依靠一个
Just-In-Time(JIT)
编译器来解释字节码。这种解释运行的做法并不高效,但让应用更容易兼容不同硬件和架构。Dalvik经过优化,允许在有限的内存中运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。 -
ART虚拟机:使用
Ahead-Of-Time(AOT)
编译机制,在应用安装时就预编译字节码为机器语言并保存到本地,后缀为oat
的文件,之后再打开应用直接读取这个本地机器语言即可,效率大大提升了。
ART对比Dalvik优缺点(类似解释性语言和编译型语言对比):
-
优点:
- 系统性能显著提升。
- 应用启动更快、运行更快,体验更流畅,触感反馈更及时。
- 更长的电池续航能力。
-
缺点:
- 更大的存储空间占用,可能会增加10%~20%。
- 更长的应用安装时间。
总的来说ART的功效就是空间换时间
参考:
http://www.cnblogs.com/shaweng/p/3811461.html
https://www.zhihu.com/question/29406156