DVM和ART的区别详解
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的区别详解相关推荐
- HashTable和HashMap的区别详解
HashTable和HashMap的区别详解 一.HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同 ...
- java mod %区别_Java中 % 与Math.floorMod() 区别详解
%为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...
- 关于numpy中eye和identity的区别详解
https://www.jb51.net/article/175386.htm np.identity(n, dtype=None) np.eye(N, M=None, k=0, dtype=< ...
- php为什么需要配置路由器,laravel 配置路由 api和web定义的路由的区别详解
1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware ...
- python协程详解_对Python协程之异步同步的区别详解
一下代码通过协程.多线程.多进程的方式,运行代码展示异步与同步的区别. import gevent import threading import multiprocessing # 这里展示同步和异 ...
- Jar/War/Ear等包的作用与区别详解
Jar/War/Ear等包的作用与区别详解 以客户角度来看,jar文件就是一种封装格式,用户不需要知道jar包中有多少个.class格式的文件及每个文件中的功能与作用,也可以得到相应的访问的结果.ja ...
- Java中print、printf、println的区别 详解
Java中print.printf.println的区别详解 printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和pr ...
- axios请求接口http_使用axios请求接口,几种content-type的区别详解
axios的使用 安装(一般使用框架的话, 脚手架都集成了) $ npm install axios 请求示例 // POST axios.post('/user', { firstName: 'Fr ...
- vue 事件调用 传参_对vue下点击事件传参和不传参的区别详解
如下所示: {{btn_text1}} {{btn_text2}} var _vm = new Vue({ data : { btn_text1 : '点击1' , btn_text2 : '点击2' ...
最新文章
- 1.23 实例:正则表达式验证IP地址
- 机器视觉 · 立体相机
- Mysql数据库设计及常见问题
- python适配器模式角色_Python设计模式之适配器模式原理与用法详解
- java中商业数据计算时用到的类BigDecimal和DecimalFormat
- Docker 三剑客
- mysql数据库参考_干货:MySQL数据库优化参考
- excel实战应用案例100讲(十二)-用Excel做一个自动抽奖器
- CSS3选择器:nth-child和:nth-of-type之间的差异
- Exam化的软件项目管理
- tl wn322g linux驱动下载,怎样才能装好tl_wn322G+V2.0版USB无线网卡的Linux驱动
- c# base 和this 继承
- Spring Boot之发送HTTP请求(RestTemplate详解)
- 计算机启动灯光提示,为什么我的电脑开机时指示灯为黄色并不断闪烁,且开不开机?...
- leetcode 刷道题 70 earch Insert Position 二进制搜索插入位置
- 录像机中码流类型中定时、事件、网传代表什么意思?
- h61 nvme硬盘_谁更快?PCIe 4.0时代的NVMe固态硬盘性能对决
- 全新安装Windows10系统(PE下)
- Windows下编译LibreCAD
- 计算机图形图像处理专业知识,计算机图形图像处理专业技术的突破研究
热门文章
- Redis+Zookeeper+NIO+JVM+Dubbo+mq+Kafka+ElasticSearch+POI相关面试题
- 模型预测控制(MPC)解析(七):约束控制问题的表述
- 云端服务器(linux版)部署mysql
- WIN10系统 插上耳机没声音,解决方案
- 为什么说梯度的反方向是函数下降最快的方向
- BZOJ 3240 [Noi2013] 矩阵游戏 题解
- 【Excel】在单元格中插入换行符
- JS基础-事件模型(事件事件流自定义事件事件冒泡/代理)
- 元素的隐藏和显示(v-show指令)
- java 量化指标_量化投资学习笔记13——各种指标的绘图、计算及交易策略