一、什么是DVM,和JVM有什么不同?

JVM是Java Virtual Machine,而DVM就是Dalvik Virtual Machine,是安卓中使用的虚拟机,所有安卓程序都运行在安卓系统进程里,每个进程对应着一个Dalvik虚拟机实例。他们都提供了对象生命周期管理、堆栈管理、线程管理、安全和异常管理以及垃圾回收等重要功能,各自拥有一套完整的指令系统,以下简要对比两种虚拟机的不同。

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

②Dalvik可执行文件体积更小

③JVM基于栈,DVM基于寄存器
JAVA虚拟机基于栈结构,程序在运行时虚拟机需要频繁的从栈上读取写入数据,这个过程需要更多的指令分派与内存访问次数,会耗费很多CPU时间。Dalvik虚拟机基于寄存器架构,数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式要快很多。

二、什么是ART虚拟机,和JVM/DVM有什么不同?

首先了解**JIT(Just In Time,即时编译技术)**和AOT(Ahead Of Time,预编译技术)两种编译模式。

JIT以JVM为例,javac把程序源码编译成JAVA字节码,JVM通过逐条解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译,执行速度必然比C/C++编译后的可执行二进制字节码程序慢,为了提高执行速度,就引入了JIT技术,JIT会在运行时分析应用程序的代码,识别哪些方法可以归类为热方法,这些方法会被JIT编译器编译成对应的汇编代码,然后存储到代码缓存中,以后调用这些方法时就不用解释执行了,可以直接使用代码缓存中已编译好的汇编代码。这能显著提升应用程序的执行效率。(安卓Dalvik虚拟机在2.2中增加了JIT)相对的AOT就是指C/C++这类语言,编译器在编译时直接将程序源码编译成目标机器码,运行时直接运行机器码。

Dalvik虚拟机执行的是dex字节码,ART虚拟机执行的是本地机器码。Dalvik执行的是dex字节码,依靠JIT编译器去解释执行,运行时动态地将执行频率很高的dex字节码翻译成本地机器码,然后在执行,但是将dex字节码翻译成本地机器码是发生在应用程序的运行过程中,并且应用程序每一次重新运行的时候,都要重新做这个翻译工作,因此,及时采用了JIT,Dalvik虚拟机的总体性能还是不能与直接执行本地机器码的ART虚拟机相比。

安卓运行时从Dalvik虚拟机替换成ART虚拟机,并不要求开发者重新将自己的应用直接编译成目标机器码,也就是说,应用程序仍然是一个包含dex字节码的apk文件。所以在安装应用的时候,dex中的字节码将被编译成本地机器码,之后每次打开应用,执行的都是本地机器码。移除了运行时的解释执行,效率更高,启动更快。(安卓在4.4中发布了ART运行时)

ART优点:
①系统性能显著提升
②应用启动更快、运行更快、体验更流畅、触感反馈更及时
③续航能力提升 ④支持更低的硬件

ART缺点
①更大的存储空间占用,可能增加10%-20%
②更长的应用安装时间

总的来说ART就是“空间换时间”

三、参考

  • JVM、DVM(Dalvik VM)和ART虚拟机对比

  • JVM、DVM(Dalvik VM)和ART虚拟机的区别

  • JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比

  • Android内存管理(JVM 、DVM(dalvik) 、ART简单介绍)

JVM(JAVA虚拟机)、DVM(Dalvik虚拟机)和ART虚拟机相关推荐

  1. JVM、DVM(Dalvik VM)和ART虚拟机的区别

    JVM.DVM(Dalvik VM)和ART虚拟机的区别 DVM vs JVM 1.共同点: 都是解释执行 都是每个 OS 进程运行一个 VM,并运行一个单独的程序 在较新版本中(Froyo / Su ...

  2. Java虚拟机和Dalvik(android)虚拟机的区别

    首先你必须对java虚拟机中常用的一款有深入的了解,比如Hotspot. 然后你再了解下android系统和Dalvik. Dalvik 与 传统jvm的差别还是很大的,总结来说,我个人把其归纳为三大 ...

  3. 面试关于jvm、dvm和art虚拟机区别

    一.Dalvik与JVM的区别 1.首先最主要的区别,Dalvik 基于寄存器,而 JVM 基于栈.那么什么是基于寄存器什么是基于栈呢? 有关寄存器可以参照百度百科的内容,下面是一段摘抄: 寄存器是中 ...

  4. JAVA虚拟机、Dalvik虚拟机和ART虚拟机

    从Android5.0开始废弃了Dalvik,全面推行ART. Dalvik与ART的区别 (1)在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行 ...

  5. java vm art 2.1.0_成都汇智动力-JVM、DalvikVM和ART虚拟机之间的区别

    使用Dalvik Virtual Machine (DVM)作为其,所有安卓程序都运行在安卓系统进程里,每个进程对应着一个Dalvik虚拟机实例.他们都提供了对象生命周期管理.堆栈管理.线程管理.安全 ...

  6. 【Java 虚拟机原理】动态字节码技术 | Dalvik ART 虚拟机 | Android 字节码打包过程

    文章目录 一.动态字节码技术 二.Dalvik & ART 虚拟机 三.Android 字节码打包过程 总结 一.动态字节码技术 动态字节码技术 就是在 运行时 , 动态修改 Class 字节 ...

  7. Dalvik 和 ART虚拟机

    1. Dalvik 虚拟机 Dalvik 虚拟机(Dalvik Virtual Machine),简称 Dalvik VM 或者 DVM.它是 Google 专门为 Android 平台开发的虚拟机, ...

  8. android -------- java虚拟机和Dalvik虚拟机

    2019独角兽企业重金招聘Python工程师标准>>> java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体 ...

  9. Java方法在art虚拟机中的执行

    前言 ART 虚拟机执行 Java 方法主要有两种模式:quick code 模式和 Interpreter 模式 quick code 模式:执行 arm 汇编指令 Interpreter 模式:由 ...

最新文章

  1. openresty nginx升级版
  2. UITextView中的占位符
  3. 读取Excel表格数据到DataGridView中
  4. npm run 脚本背后的事情
  5. c++的STL--1概念通述
  6. oracle存储过程日志打印,如何在oracle存储过程中逐行打印
  7. VirtualBox 安装ghost版windows XP
  8. python创建虚拟环境失败_virtualenv 创建虚拟环境不成功
  9. C语言断言assert详解
  10. 28款GitHub最流行的开源机器学习项目
  11. bio和bieos哪个标注模式好_通用块层bio详解
  12. java pdf合并_利用iText 合并PDF与分解PDF的例子
  13. three.js将fbx文件转为glb文件,并且压缩处理
  14. 超详细excel键盘快捷键大全
  15. AM、PM是上午和下午的英文缩写、英文缩写(英语星期月份等)
  16. 调整html元素大小 resize
  17. UNI-APP_uni-app uni.getUserProfile微信授权,微信授权信息显示微信用户解决
  18. 信息安全三要素(CIA):
  19. 学计算机画素描吗,用电脑制作一张素描画
  20. fiddler抓取https,提示“CA 根证书不在受信任的存储区域”的解决方法

热门文章

  1. 小程序分享朋友圈_重磅:小程序将可分享到朋友圈
  2. 打扮家能否将齐家网变成过去时?
  3. JS计算保留有效位小数
  4. LDAP Port 636
  5. 手机视频文件怎么压缩变小
  6. MySQL 服务正在启动 MySQL 服务无法启动
  7. iOS游戏开发没有你想的那么难--Hardest
  8. android 强制息屏,如何让Android设备实现息屏显示
  9. go-ethereum源码解析
  10. jdk8 list 反转_YSL反转巴黎香水真假鉴别