美文网首页
DVM, ART, Dalvik, JVM

DVM, ART, Dalvik, JVM

作者: 瀚海来客 | 来源:发表于2019-11-06 12:14 被阅读0次

转载自:
https://www.jianshu.com/p/923aebd31b65
https://www.jianshu.com/p/ee8040e56df5

Dalvik虚拟机

Dalvik虚拟机( Dalvik Virtual Machine ),是由Dan Bornstein编写的,DVM是Google专门为Android平台开发的虚拟机,它运行在Android运行时库中。需要注意的是DVM并不是一个Java虚拟机(以下简称JVM)

Dalvik虚拟机采用的是JIT(Just-In-Time)编译模式,意思为即时编译,我们知道apk被安装到手机中时,对应目录会有dex或odex和apk文件,apk文件存储的是资源文件,而dex或odex(经过优化后的dex文件内部存储class文件)内部存储class文件,每次运行app时虚拟机会将dex文件解释翻译成机器码,这样才算是本地可执行代码,之后被系统运行。

Dalvik虚拟机负责解释dex文件为机器码,如果我们不做处理的话,每次执行代码,都需要Dalvik将dex代码翻译为微处理器指令,然后交给系统处理,这样效率不高。为了解决这个问题,Google在2.2版本添加了JIT编译器,当App运行时,每当遇到一个新类,JIT编译器就会对这个类进行编译,经过编译后的代码,会被优化成相当精简的原生型指令码(即native code),这样在下次执行到相同逻辑的时候,速度就会更快。

安卓虚拟机ART

Android4.4版本以前是Dalvik虚拟机,4.4版本开始引入ART虚拟机(Android Runtime)。在4.4版本上,两种运行时环境共存,可以相互切换,但是在5.0版本以后,Dalvik虚拟机(简称DVM)则被彻底的丢弃,全部采用ART。

ART(Android Runtime) 是一种执行效率更高且更省电的运行机制,执行的是本地机器码,这些本地机器码是从dex字节码转换而来。

ART采用的是AOT(Ahead-Of-Time)编译,应用在第一次安装的时候,字节码就会预先编译成机器码存储在本地。在App运行时,ART模式就较Dalvik模式少了解释字节码的过程,所以App的运行效率会有所提高,占用内存也会相应减少。谷哥在5.0以后的Android版本中默认了ART模式启动,就是希望Android能摆脱卡顿这个毛病。

ART和Dalvik的区别

  • Dalvik每次都要编译再运行,ART只会安装时启动编译
  • ART占用空间比Dalvik大(原生代码占用的存储空间更大),就是用“空间换时间”
  • ART减少编译,减少了CPU使用频率,使用明显改善电池续航
  • ART应用启动更快、运行更快、体验更流畅、触感反馈更及时

ART、Dalvik、AOT、JIT四个名称的关系

  • JIT代表运行时编译策略,也可以理解成一种运行时编译器,是为了加快Dalvik虚拟机解释dex速度提出的一种技术方案,来缓存频繁使用的本地机器码
  • AOT可以理解为一种编译策略,即运行前编译,ART虚拟机的主要特征就是AOT
  • ART和Dalvik都算是一种Android运行时环境,或者叫做虚拟机,用来解释dex类型文件。但是ART是安装时解释,Dalvik是运行时解释

Dalvik与JVM的区别

DVM之所以不是一个JVM ,主要原因是DVM并没有遵循JVM规范来实现。
基于的架构不同
执行的字节码不同

  • 1.java虚拟机运行的是Java字节码,Dalvik虚拟机运行的是Dalvik字节码;传统的Java程序经过编译,生成Java字节码保存在class文件中,java虚拟机通过解码class文件中的内容来运行程序。而Dalvik虚拟机运行的是Dalvik字节码,所有的Dalvik字节码由Java字节码转换而来,并被打包到一个DEX(Dalvik Executable)可执行文件中Dalvik虚拟机通过解释Dex文件来执行这些字节码。

  • 2.Dalvik可执行文件体积更小。SDK中有一个叫dx的工具负责将java字节码转换为Dalvik字节码。

  • 3.java虚拟机与Dalvik虚拟机架构不同。java虚拟机基于栈架构。程序在运行时虚拟机需要频繁的从栈上读取或写入数据。这过程需要更多的指令分派与内存访问次数,会耗费不少CPU时间,对于像手机设备资源有限的设备来说,这是相当大的一笔开销。Dalvik虚拟机基于寄存器架构,数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式快的多.

相关文章

  • DVM, ART, Dalvik, JVM

    转载自:https://www.jianshu.com/p/923aebd31b65https://www.jia...

  • 虚拟机

    java运行环境为jvm,安卓运行环境为dvm(Dalvik VM)或avm(Art VM) jvm基于栈(内存)...

  • 虚拟机

    前言 本篇文章将会介绍Java虚拟机(JVM)的结构等基础知识、Dalvik(DVM)/ART虚拟机与JVM的比较...

  • 虚拟机概述

    前言 本篇文章将会介绍Java虚拟机(JVM)的结构等基础知识、Dalvik(DVM)/ART虚拟机与JVM的比较...

  • 2021-02-24

    JVM、Dalvik、ART三者的关系 JVM、Dalvik、ART三者的关系[https://www.jians...

  • Java虚拟机学习 - 体系结构 内存模型

    在分析JVM体系结构之前,先看下Dalvik-JVM和Java-DVM的区别: 1.DVM基于寄存器JVM基于内存...

  • JVM DVM ART

    一.Java -> JVM JAVA为每一个平台开发一个 JVM,即 Java 虚拟机。Java 编译器将 .ja...

  • JVM、DVM、ART

    一、JVM、JRE、JDK JVM:Java Virtual Machine。java虚拟机是一个翻译器,把Cla...

  • Android虚拟机

    [Android开发JVM、Dalvik以及ART的区别] 前言 Dalvik是Google公司自己设计用于And...

  • 理解Dalvik和ART、JVM虚拟机

    理解基本的Dalvik和ART、JVM虚拟机 一、Dalvik介绍 Dalvik VM是Android平台的核心组...

网友评论

      本文标题:DVM, ART, Dalvik, JVM

      本文链接:https://www.haomeiwen.com/subject/vwhubctx.html