DVM是Google为了Android平台研发的虚拟机,DVM严格上来说并不是JAVA虚拟机,其本身并没有遵循JVM规范。
ART是在Android4.4的时候由Google研发,用于替换DVM的虚拟机。
ART虚拟机与DVM主要有以下4点不同:
1、应用运行方式不同:DVM中的应用每次运行的时候,字节码都需要通过JIT编译器编译为机器码,这样就会导致应用的运行效率变低。而ART,系统在安装应用程序的时候会进行一次预编译处理,将字节码预先编译成机器码并存储在本地,这样应用程序每次运行时就不需要执行编译了,运行效率会大大提升,设备的耗电量也会降低。当然使用AOT会使应用程序的安装时长边长,尤其是一些复杂的应用。另外字节码编译成机器码,机器码需要的存储空间会多一些。在Android7.0之后ART加入即时编译器JIT,在应用程序安装的时候,并不会将字节码全部编译为机器码,仅将热点代码编译成机器码,从而缩短了应用的安装时间并节省了空间。
2、DVM是为了32位的CPU设计的,而ART支持64位的并兼容32位的CPU。DVM基于寄存器,其使用寄存器的都是32位,这就导致对于64位的类型,他需要使用连续的两个寄存器来表示。
3、ART对垃圾回收机制进行改进,比如更频繁地执行并垃圾收集,将GC暂停的次数由2次减少到1次。
4、ART的运行时堆空间划分和DVM不同。
DVM在运行时堆采用标记-清除的算法GC,它由两个Space以及多个辅助的数据结构组成,其本身主要是由Zygote Space和Allocation Space组成。其中Zygote Space主要是管理Zygote进程启动过程中预加载和创建的对象,不会触发GC,由Zygote Space和应用进程共享空间。对象在Allocation Space上分配和释放。ART 虚拟机主要增加了Image Space和Large Object Space两个空间,分别用于存放预加载类和大对象,对于ART虚拟机而言,Zygote Space和Image Space为进程共享内存。

DVM和ART的区别详解相关推荐

  1. HashTable和HashMap的区别详解

    HashTable和HashMap的区别详解 一.HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同 ...

  2. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  3. 关于numpy中eye和identity的区别详解

    https://www.jb51.net/article/175386.htm np.identity(n, dtype=None) np.eye(N, M=None, k=0, dtype=< ...

  4. php为什么需要配置路由器,laravel 配置路由 api和web定义的路由的区别详解

    1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware ...

  5. python协程详解_对Python协程之异步同步的区别详解

    一下代码通过协程.多线程.多进程的方式,运行代码展示异步与同步的区别. import gevent import threading import multiprocessing # 这里展示同步和异 ...

  6. Jar/War/Ear等包的作用与区别详解

    Jar/War/Ear等包的作用与区别详解 以客户角度来看,jar文件就是一种封装格式,用户不需要知道jar包中有多少个.class格式的文件及每个文件中的功能与作用,也可以得到相应的访问的结果.ja ...

  7. Java中print、printf、println的区别 详解

    Java中print.printf.println的区别详解 printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和pr ...

  8. axios请求接口http_使用axios请求接口,几种content-type的区别详解

    axios的使用 安装(一般使用框架的话, 脚手架都集成了) $ npm install axios 请求示例 // POST axios.post('/user', { firstName: 'Fr ...

  9. vue 事件调用 传参_对vue下点击事件传参和不传参的区别详解

    如下所示: {{btn_text1}} {{btn_text2}} var _vm = new Vue({ data : { btn_text1 : '点击1' , btn_text2 : '点击2' ...

最新文章

  1. 1.23 实例:正则表达式验证IP地址
  2. 机器视觉 · 立体相机
  3. Mysql数据库设计及常见问题
  4. python适配器模式角色_Python设计模式之适配器模式原理与用法详解
  5. java中商业数据计算时用到的类BigDecimal和DecimalFormat
  6. Docker 三剑客
  7. mysql数据库参考_干货:MySQL数据库优化参考
  8. excel实战应用案例100讲(十二)-用Excel做一个自动抽奖器
  9. CSS3选择器:nth-child和:nth-of-type之间的差异
  10. Exam化的软件项目管理
  11. tl wn322g linux驱动下载,怎样才能装好tl_wn322G+V2.0版USB无线网卡的Linux驱动
  12. c# base 和this 继承
  13. Spring Boot之发送HTTP请求(RestTemplate详解)
  14. 计算机启动灯光提示,为什么我的电脑开机时指示灯为黄色并不断闪烁,且开不开机?...
  15. leetcode 刷道题 70 earch Insert Position 二进制搜索插入位置
  16. 录像机中码流类型中定时、事件、网传代表什么意思?
  17. h61 nvme硬盘_谁更快?PCIe 4.0时代的NVMe固态硬盘性能对决
  18. 全新安装Windows10系统(PE下)
  19. Windows下编译LibreCAD
  20. 计算机图形图像处理专业知识,计算机图形图像处理专业技术的突破研究

热门文章

  1. Redis+Zookeeper+NIO+JVM+Dubbo+mq+Kafka+ElasticSearch+POI相关面试题
  2. 模型预测控制(MPC)解析(七):约束控制问题的表述
  3. 云端服务器(linux版)部署mysql
  4. WIN10系统 插上耳机没声音,解决方案
  5. 为什么说梯度的反方向是函数下降最快的方向
  6. BZOJ 3240 [Noi2013] 矩阵游戏 题解
  7. 【Excel】在单元格中插入换行符
  8. JS基础-事件模型(事件事件流自定义事件事件冒泡/代理)
  9. 元素的隐藏和显示(v-show指令)
  10. java 量化指标_量化投资学习笔记13——各种指标的绘图、计算及交易策略