Android虚拟机Dalvik ART

Dalvik虚拟机

Dvm与Jvm的区别

  • 基于的架构不同

    • jvm基于栈,所需的指令更多,会导致速度变慢
    • Dvm基于寄存器
  • 执行的字节码不同

    • java: 生成 .class文件
    • apk: .dex文件。 dex工具将.class文件的冗余信息去除掉,然后把所有的.class文件整合到.dex文件中,减少IO操作
  • dvm允许在有限的内存中同时运行多个进程

  • dvm由zygote进程创建和初始化
  • dvm有共享机制

Dvm运行时堆

  • 运行时堆用标记-清除(Mark-Sweep)算法进行GC
  • 由两个Space组成。
    • Zygote Space:用来管理Zygote进程中加载和创建的对象,不会触发GC
    • Allocation Space: 进行对象的分配与释放,不共享,每个进程都有独立的一份

ART虚拟机

ART虚拟机是4.4发布的,但默认还是采用DVM。 Android5.0版本中默认采用ART,Dvm退出舞台

ART与DVM的区别

  • 在运行效率上

    • dvm: 每次运行,字节码都需要通过JIT进行编译为机器码,运行效率低
    • ART: 应用在安装的时候会进行预编译(AOT),将字节码预先编译成机器码存储在本地。这样程序在每次运行时就不需要编译了,提升运行效率
      • ART存在的缺点:1.安装时间长 2.字节码预先编译成机器码占用空间变多
      • ART的改进:Android7.0版本中加入JIT,作为AOT的补充。1.安装的时候不会全部编译成机器码,减少安装时间。 2.在运行时将热点代码编译成机器码,节省空间
  • 在CPU的设计上

    • dvm : 是为32位CPU设计的
    • ART: 支持64位,同时兼容32位CPU
  • 在垃圾回收机制上

    • ART进行改进,更加频繁的执行并行垃圾收集
  • 运行时堆空间的划分上

ART运行时堆

ART运行时堆

其中,Zygote Space和Image Space是进程间共享的