Dalvik和ART
--摘自《Android进阶解密》
DVM和ART都是在Zygote进程中诞生的
*DVM和JVM的区别*
1.基于的架构不同
DVM是基于寄存器的,它没有基于栈的虚拟机在复制数据时而使用的大量的出入栈指令,同时指令更紧凑、更简洁。但是由于显式指定了操作数,所以基于寄存器的指令会比基于栈的指令要大,但是由于指令数量的减少,总的代码数不会增加多少
2.执行的字节码不同
JVM执行顺序:.java文件-->.class文件-->.jar文件
DVM执行顺序:.java文件-->.class文件-->.dex文件
.apk文件中只包含了一个.dex文件,这个.dex文件将所有的.class里面所包含的信息全部整合在一起了,这样再加载就加快了速度
3.DVM允许在有限的内存中同时运行多个进程
4.DVM由Zygote创建和初始化
5.DVM有共享机制
不同应用之间在运行时可以共享相同的类,拥有更高的效率,而JVM机制不存在这种共享机制
6.DVM早期没有使用JIT编译器,Android 2.2之后开始使用JIT
*DVM架构*
1.首先Java编译器编译的.class文件经过DX工具转换成.dex文件,.dex文件由类加载器处理,接着解释器根据指令集对Dalvik字节码进行解释、执行,最后交于Linux处理
2.DVM的运行时堆使用标记--清除算法进行GC
3.DVM引起GC的原因
1)GC_CONCURRENT:当堆开始填充时,并发GC可以释放内存
2)GC_FOR_MALLOC:当堆内存已满时,App尝试分配内存而一起的GC,系统必须停止App并回收内存
3)GC_HPROF_DUMP_HEAP:当你请求创建HPROF文件来分析堆内存时出现的GC
4)GC_EXPLICIT:显式的GC,例如调用System.gc()(应该避免调用显式的GC,信任GC会在需要时运行)
5)GC_EXTERNAL_ALLOC:仅适用于API级别小于等于10,且用于外部分配内存的GC
*ART与DVM的区别*
1.ART系统在安装应用程序时会进行一次AOT(预编译),Android 7.0版本的ART加入了JIT,作为AOT的一个补充,在应用程序安装时并不会将字节码全部编译成机器码,而是在运行中将热点代码编译成机器码,从而缩短应用程序的安装时间并节省了存储空间
2.DVM为32位CPU设计,ART支持64位并兼容32位CPU
3.ART对垃圾回收机制进行了改进,比如更频繁地执行并行垃圾收集
4.ART的运行时堆空间划分和DVM不同
*ART引起GC的原因*
1.Concurrent:并发GC,不会使App的线程暂停,该GC是在后台线程运行的,并不会阻止内存分配
2.Alloc:当堆内存已满时,App尝试分配内存而引起的GC,这个GC会发生在正在分配内存的线程中
3.Explicit:App显示的请求垃圾收集
4.NativeAlloc:Native内存分配时,比如为Bitmaps或者RenderScrept分配对象,这会导致Native内存压力,从而触发GC
5.CollectorTransiton:由堆转换引起的回收,这是运行时切换GC而引起的
6.HomegeneousSpaceCompact:齐性空间压缩是指空闲列表到压缩的空闲列表空间,通常发生在当App已经移动到可察觉的暂停进程状态时
7.DisableMovingGc:发生并发堆压缩时,由于使用了GetPrimitiveArrayCritical,收集会被阻塞
8.HeapTrim:收集会一直被阻塞,直到堆内存整理完毕
Dalvik和ART的更多相关文章
- Android开发——JVM、Dalvik以及ART的区别【转帖】
转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52354964 0. 前言 Dalvik是Google公司自己设计用于Android平 ...
- 安卓执行机制JNI、Dalvik、ART之间的比較 。android L 改动执行机制。
Android L默认採用ART执行环境.全然兼容64位移动处理器.Google称这将比此前的Dalvik模式性能提高两倍,可是会占用很多其它的内存空间.Android有三种执行模式:JNI.Dalv ...
- Android Dalvik、ART及APK编译过程
0.1 先对Dalvik以及ART做简单介绍: 什么是Dalvik: Dalvik是Google公司自己设计用于Android平台的Java虚拟机.dex格式是专为Dalvik应用设计的一种压缩格式, ...
- 安卓dalvik和art区别
Dalvik模式像是一台折叠自行车,每次骑之前都要组装后才能上路.而ART模式就是一个已经装好的自行车,直接就能上车走人.所以ART模式在效率上肯定是要好于Dalvik. 通过以上这种表格,我们可以直 ...
- Android_对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别
虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,谈谈加载图片的时候怎么处理大图片的,outmemoryExceptionBitmapFactory.option 垃圾回收,没有引用的对 ...
- Dalvik和ART的区别(转)
什么是Dalvik: Dalvik是Google公司自己设计用于Android平台的Java虚拟机.Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一. ...
- Dalvik和ART的区别
什么是Dalvik: Dalvik是Google公司自己设计用于Android平台的Java虚拟机.Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一. ...
- Android内存管理(8)Dalvik,ART和 .dex 是什么*
什么是Dalvik: Dalvik是Google公司自己设计用于Android平台的Java虚拟机.Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一. Da ...
- Dalvik和ART简单介绍
1.classes.dex文件初识 我们先把QQ_236.apk后缀改为QQ_236.zip,然后解压.发现有一个classes.dex文件,这个classes.dex是java源代码编译后生 ...
随机推荐
- JS中如何获取JSON有多少个字段,JSON子项的个数或叫length
如有JSON数据格式如下: {names:'张三','age':16,'sex':‘男’} 或 {names:'张三','age':16,'sex':‘男’} 如何获取JSON子键的数量?挺头疼的.使 ...
- DirectX11--实现一个3D魔方(2)
前言 上一章我们主要讲述了魔方的构造和初始化.纹理的准备工作.目前我还没有打算讲Direct3D 11关于底层绘图的实现,因此接下来这一章的重点是魔方的旋转.因为我们要的是能玩的魔方游戏,而不是一个观 ...
- Java调用第三方http接口的方式
1. 概述 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适.很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信.天气等). 在J ...
- python 基础部分重点复习整理2
把这里的题目争取刷一遍 博客记录 python的ORM框架peewee SQLAlchemy psycopg2 Django 在1 的基础上,重点突出自己以前没注意的,做到精而不杂!!! Python ...
- 微信退款时候报”请求被中止: 未能创建 SSL/TLS 安全通道“或”The request was aborted: Could not create SSL/TLS secure channel“的错误
如题,英文中文表述的是一个意思 退款测试在我本机测试一切都是正常的,但是发布到了服务器就报这样的一个错啦 但是无论百度或者google或者bing,你能够搜索到的结果都很类似,综合起来就是加这样一些代 ...
- CentOS6和CentOS7
http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso net.ifnames= biosdevname ...
- Dynamic Clock in Terminal.
#!/bin/bash tput civis while [ 1 ] do tput clear # tput cup 10 20 info=$(date "+%Y-%m-%d %H:%M: ...
- 异常处理--logging模块
一. 异常处理 1. 异常类型: 语法错误 : 空格 缩进 语法规则 应该在我们写代码的时候就避免 逻辑错误: 应该在程序当中写代码处理 条件判断 异常处理 2. 常见的报错类型: Attribute ...
- Laravel 5.7 使用 PHP artisan migrate 的问题
这是由于Laravel 默认使用 utf8mb4 字符, 包括支持在数据库存储「 表情」 . 如果你正在运行的 MySQL release 版本低于5.7.7 或 MariaDB release版本低 ...
- linux --xampp 配置多个网站
我们想要在本地安装两个测试域名,www.abc.tld, www.xyz.tld, 分别指向到 htdoc 目录下的 abc.tld 和 xyz.tld 文件夹下.tld 是顶级域名 the top ...