一、Dalvik与JVM的区别

1、首先最主要的区别,Dalvik 基于寄存器,而 JVM 基于栈。那么什么是基于寄存器什么是基于栈呢?

有关寄存器可以参照百度百科的内容,下面是一段摘抄:

寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,寄存器有累加器(ACC)。

寄存器的用途:

1.可将寄存器内的数据执行算术及逻辑运算。

2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。

3.可以用来读写数据到电脑的周边设备。

寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组。更适当的是称他们为“架构寄存器”。

从上面我们可以大致了解真实硬件设备中寄存器的作用,我们知道虚拟机是真机的一种模拟,所以可以大概理解虚拟机中的寄存器,不过基于寄存器的虚拟机可能跟真机差别比较大 。

基于栈的虚拟机代码必须使用push和pop指令来移动变量,每个指令操作一个地址,比如进行一个加法操作,需要分别取出要相加的变量,计算然后再将结果存入栈中。对于基于寄存器的虚拟机,没有出栈和入栈的操作,只需要执行一条指令就可以了。寄存器虚拟机和栈虚拟机的指令的差别在于,运算大都是二地址或三地址指令。所以。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。

2、JVM运行java字节码,DVM运行的是其专有的文件格式Dex

JVM字节码由.class文件组成,每个文件一个class。JVM在运行的时候为每一个类装载字节码。相反的,Dalvik程序只包含一个.dex文件,这个文件包含了程序中所有的类。Java编译器创建了JVM字节码之后,Dalvik的dx编译器删除.class文件,重新把它们编译成Dalvik字节码,然后把它们写进一个.dex文件中。

以上是jvm和dvm主要的两点区别,其他区别还有:

.每一个DVM对应一个linux程序

.DVM 和 JVM SDK的SDK不同。

二、Dalvik与art虚拟机的区别

Dalvik就是Android4.4及之前使用的虚拟机,它使用的是JIT(Just-In-Time)技术来进行代码转译,每次执行应用的时候,Dalvik将程序的代码编译为机器语言执行。

ART虚拟机是在Android5.0才开始使用的Android虚拟机,ART虚拟机必须要兼容Dalvik虚拟机的特性,但是ART有一个很好的特性AOT(ahead of time),这个特性就是我们在安装APK的时候就将dex直接处理成可直接供ART虚拟机使用的机器码,ART虚拟机将.dex文件转换成可直接运行的.oat文件,ART虚拟机天生支持多dex,所以也不会有一个合包的过程,所以ART虚拟机会很大的提升APP冷启动速度。

虚拟机从Dalvik换成ART后,Android系统的性能得到了一定程度的提升。不过ART与Dalvik相比也存在一些缺点,比较明显的表现就是,apk经过dex2oat预编译之后,占用的空间增加,因此Android ROM占用的空间更大。手机在安装下载的apk时,安装时间也明显变长。

面试关于jvm、dvm和art虚拟机区别相关推荐

  1. dvm与art的区别_Android运行时– DVM与ART,AOT与JIT

    dvm与art的区别 In this tutorial, we'll be discussing the runtime environments used in Android. We'll see ...

  2. DVM和ART的区别详解

    DVM是Google为了Android平台研发的虚拟机,DVM严格上来说并不是JAVA虚拟机,其本身并没有遵循JVM规范. ART是在Android4.4的时候由Google研发,用于替换DVM的虚拟 ...

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

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

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

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

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

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

  6. DVM,ART,JVM之间的关系

    DVM,ART与JVM区别 DVM和ART是谷歌为Android量身定做的java虚拟机,由于android最初设计是用于手机端,对内存要求很高,Android DVM有独有的优化措施 Dex文件代替 ...

  7. JVM,DVM,ART

    JVM 可以把Java程序设计语言.Java虚拟机和Java API类库这三部分统称为JDK(Java Development Kit),它是Java程序开发的最小环境.另外,Java API中的Ja ...

  8. jvm与dvm两种虚拟机的不同

    jvm : java虚拟机 sun dvm:  dalvik虚拟机  google 区别:         1.基于的架构不同,jvm 基于栈架构,栈是位于内存上的一个空间,执行指令操作,需要向cpu ...

  9. Jvm与DVM与ART

    JVM虚拟机 JVM 的执行的指令是基于栈结构,需要去栈中读写数据,指令会变多,导致速度变慢.执行编译后的.class文件,执行顺序为:.java 文件 → .class 文件 → .jar 文件. ...

最新文章

  1. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll模型
  2. ibatis如何支持clob 和blob
  3. Spring boot表单提交日期格式
  4. 一天学完spark的Scala基础语法教程二、运算符与分支语句(idea版本)
  5. Analysis of Cloud Computing Architectures阅读笔记--提出了Screen虚拟化方法
  6. 1.12 深层循环神经网络
  7. 说人话很难。。。。。。
  8. 网页设计中时尚​​的下拉菜单案例
  9. Laravel 速记表
  10. rk3399_android7.1调试USB蓝牙模块小结
  11. android插件化-apkplug中OSGI服务基本原理-08
  12. RequestDispatcher请求转发方法
  13. 引导工业物联网变革 中国占据有利位置
  14. POJ 3083 dfs + bfs
  15. Flink 灵魂两百问,这谁顶得住?
  16. Android LocalServices解耦妙用: system_server进程中各个服务之间的连通器LocalServices
  17. Kafka——Kafka的日志存储(5)
  18. 期刊类文章左下角添加横线的方法
  19. 当全分区都格式化,无引导分区如何重装系统?如何干净的重装系统?如何干净安全的删除掉windows.old?
  20. 有哪些产品适合做引流?什么样的产品才适合做引流款

热门文章

  1. 轻量化规划调度引擎——OptaPlanner简介
  2. 用计算机打一闪一闪亮晶晶,一闪一闪亮晶晶 我去!RGB轴机械键盘灯光玩法亮瞎人...
  3. (5)完整的Django框架学习之自定义过滤器及标签
  4. PLSQL - 递归子查询RSF打破CONNECT BY LOOP限制
  5. 云端服务器的建立和登录(3.7)
  6. 绕过SSL双向校验抓取Soul App的数据包
  7. pgsql 日期转换
  8. ROS文件系统和文件系统操作
  9. Python 把蓝底照片转化为白底照片
  10. 行列式在计算机的应用,行列式的计算机及应用.doc