从Android5.0开始废弃了Dalvik,全面推行ART。

Dalvik与ART的区别

(1)在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行,这虽然会使安装过程比较快,但是会拖慢应用以后每次启动的效率。而在ART 环境中,应用在第一次安装的时候,字节码就会预编译(AOT)成机器码,这样的话,虽然设备和应用的首次启动(安装慢了)会变慢,但是以后每次启动执行的时候,都可以直接运行,因此运行效率会提高。

(2)ART占用空间比Dalvik大(字节码变为机器码之后,可能会增加10%-20%),这也是著名的“空间换时间大法"。

(3)预编译也可以明显改善电池续航,因为应用程序每次运行时不用重复编译了,从而减少了 CPU 的使用频率,降低了能耗。

ART优点:

1. 系统性能的显著提升
2. 应用启动更快、运行更快、体验更流畅、触感反馈更及时
3. 更长的电池续航能力
4. 支持更低的硬件

ART缺点:

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

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规范中以C的数据结构表达的class文件结构,class文件被虚拟机加载到内存中后便是这样

Linux对硬件的可移植性很好,Java对平台的移植性很好

一.什么是虚拟机

百度百科中解释:虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

其实简单解释就是虚拟出来的一套拥有相当于实际计算机功能的系统,相信搞it的大家,在学生时代就没少在自己计算机装过各种系统的虚拟机,比如没有苹果电脑,又想玩玩苹果洗用、又不想把window系统换成苹果系统,怎么办呢,在window上安装个虚拟机,虚拟机上装mac系统,搞定

二.什么是jvm
  java虚拟机(Java Virtual Machine)简称jvm,是运行所有java程序的抽象计算机,是java的运行环境,Java虚拟机使java语言可以跨平台运行。Java语言编译生成在Java虚拟机上运行的字节码,Java虚拟机在执行字节码时把字节码解释成具体平台上的机器指令执行。

三.什么是Dalvik
  Dalvik是google设计的用于android平台的虚拟机,是Android中运行java的基础,其指令是基于寄存器的,运行的是经过转换的.dex文件(.dex是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统),Dalvik虚拟机每次应用运行的时候,将代码编译成机器语言执行。

四.什么是ART
  android5.0之后使用ART虚拟机代替了Dalvik,ART虚拟机采用AOT(Ahead-Of-Time)技术,在应用安装时就把代码转换成机器语言,在程序运行时不再进行转换,从而优化了应用的运行速度。

五.jvm和Dalvik区别:

1.jvm基于栈,Dalvik是基于寄存器的。

JAVA虚拟机基于栈结构,程序在运行时虚拟机需要频繁的从栈上读取写入数据,这个过程需要更多的指令分派与内存访问次数,会耗费很多CPU时间。

Dalvik虚拟机基于寄存器架构,数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式要快很多。

2.jvm运行的是java字节码,Dalvik运行的是专有的文件格式.dex(dex可以减少整体文件大小,提高I/o操作的类查找速度)

六.Dalvik和ART的区别:
  Dalvik在每次应用运行时将代码编译成机器码执行,ART在应用安装时就将代码全部转换成机器码,在应用运行时不再进行转换。

ART优点:程序运行速度更快

缺点:安装时占用空间大、安装速度慢

JAVA虚拟机、Dalvik虚拟机和ART虚拟机相关推荐

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

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

  2. android art虚拟机安装,Android中art虚拟机启动流程

    本文基于Android8.1系统进行研究 一.启动zygote 在Linux内核启动完成后,首先启动系统的第一个进程init进程 init进程会读取init.rc中的配置文件 其中有Zygote的配置 ...

  3. JVM(JAVA虚拟机)、DVM(Dalvik虚拟机)和ART虚拟机

    一.什么是DVM,和JVM有什么不同? JVM是Java Virtual Machine,而DVM就是Dalvik Virtual Machine,是安卓中使用的虚拟机,所有安卓程序都运行在安卓系统进 ...

  4. android art 远程控制,IT之家学院:认识Android中的Dalvik与ART虚拟机

    又是一年高考时啊,在文章开始之前,IT之家先祝各位高考考生金榜题名~ 每到这个时候,小编就会想起自己的高三时光和高考经历,那段时光真是让人难忘.提起高三生活,可能很多同学都会想到桌子上堆得厚厚的书,黑 ...

  5. android dalvik虚拟机的作用,IT之家学院:认识Android中的Dalvik与ART虚拟机

    又是一年高考时啊,在文章开始之前,IT之家先祝各位高考考生金榜题名~ 每到这个时候,小编就会想起自己的高三时光和高考经历,那段时光真是让人难忘.提起高三生活,可能很多同学都会想到桌子上堆得厚厚的书,黑 ...

  6. 面试:Art虚拟机和Davlik虚拟机简要对比

    Android 4.4以后推出了ART虚拟机,它与Davlik虚拟机最大的不同在于,系统在安装应用时会对其进行预编译一次,将字节码转换成机器指令,以后每次启动不会重新编译,直接运行本地机器码. 直接上 ...

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

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

  8. 深入理解Android(二):Java虚拟机Dalvik

     编者按:随着移动设备硬件能力的提升,Android系统开放的特质开始显现,各种开发的奇技淫巧.黑科技不断涌现,InfoQ特联合<深入理解Android>系列图书作者邓凡平,开设深入理 ...

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

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

最新文章

  1. SAP QM初阶之事务代码CR05查询QM Work Center List
  2. 344. Reverse String
  3. Oracle编程入门经典 第1章 了解Oracle
  4. 【推荐】有趣儿的PHP文件操作常用函数总结
  5. de casteljau算法_泊松分布算法的应用:开一家4S店
  6. php raabitmq中间件_rabbitMQ消息中间件环境配置及原理了解
  7. 2020年短视频用户价值研究报告
  8. PDF 合并软件要收费?程序员自己做一个
  9. mysqlbinlog 查看mysql bin 日志 mysqlbinlog: unknown variable 'default-character-set=utf8'
  10. vue router 路由鉴权(非动态路由)
  11. 计算机二级C语言知识点
  12. 带你快速入门计算机网络模型与5G协议!!
  13. 如何将谷歌浏览器指定网页的背景颜色调成黑色,其他网页背景颜色不变——以HDLBits为例
  14. 服务器winsxs文件夹怎么清理工具,win10系统winsxs文件夹清理的操作方法
  15. Java制作PDF转图片小工具
  16. 阿里高级测开:软件测试(功能、接口、性能、自动化)详解
  17. 牵手华为冲刺L2++市场,这家国产厂商的自动驾驶版图再扩张
  18. os系统解决seaborn中文乱码问题 Font family [‘SiHei‘] not found
  19. C# 生成单色图的代码
  20. 兼莱宝分享:不想一直打工,可以做这5个冷门生意,竞争比较小,利润却很不错

热门文章

  1. 我用nodejs给朋友发了一份邮件
  2. mybatis-plus(五)-----中文文档
  3. 如何解决移动硬盘弹出时报错:设备正在使用中
  4. 高德地图上绘制城市名字和带涟漪的点标记
  5. jpi多表联查_sql 多表联查询
  6. 年轻人的第一次破产,从二次元开始
  7. 餐饮连锁门店重塑增长背后的数字化转型
  8. 数据杂谈:CIO和CTO的区别(首席信息官首席技术官)
  9. 抖音如何进行广告的投放
  10. tcpip命令全面汇总