JVM、Dalvik和ART的区别

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优缺点(类似解释性语言和编译型语言对比):

  • 优点

    1. 系统性能显著提升。
    2. 应用启动更快、运行更快,体验更流畅,触感反馈更及时。
    3. 更长的电池续航能力。
  • 缺点

    1. 更大的存储空间占用,可能会增加10%~20%。
    2. 更长的应用安装时间。

总的来说ART的功效就是空间换时间

JVM、Dalvik和ART的区别_第1张图片

参考:
http://www.cnblogs.com/shaweng/p/3811461.html
https://www.zhihu.com/question/29406156

你可能感兴趣的:(Java基础)