--摘自《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的更多相关文章

  1. Android开发——JVM、Dalvik以及ART的区别【转帖】

    转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52354964 0. 前言 Dalvik是Google公司自己设计用于Android平 ...

  2. 安卓执行机制JNI、Dalvik、ART之间的比較 。android L 改动执行机制。

    Android L默认採用ART执行环境.全然兼容64位移动处理器.Google称这将比此前的Dalvik模式性能提高两倍,可是会占用很多其它的内存空间.Android有三种执行模式:JNI.Dalv ...

  3. Android Dalvik、ART及APK编译过程

    0.1 先对Dalvik以及ART做简单介绍: 什么是Dalvik: Dalvik是Google公司自己设计用于Android平台的Java虚拟机.dex格式是专为Dalvik应用设计的一种压缩格式, ...

  4. 安卓dalvik和art区别

    Dalvik模式像是一台折叠自行车,每次骑之前都要组装后才能上路.而ART模式就是一个已经装好的自行车,直接就能上车走人.所以ART模式在效率上肯定是要好于Dalvik. 通过以上这种表格,我们可以直 ...

  5. Android_对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别

    虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,谈谈加载图片的时候怎么处理大图片的,outmemoryExceptionBitmapFactory.option 垃圾回收,没有引用的对 ...

  6. Dalvik和ART的区别(转)

    什么是Dalvik:    Dalvik是Google公司自己设计用于Android平台的Java虚拟机.Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一. ...

  7. Dalvik和ART的区别

    什么是Dalvik:    Dalvik是Google公司自己设计用于Android平台的Java虚拟机.Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一. ...

  8. Android内存管理(8)Dalvik,ART和 .dex 是什么*

    什么是Dalvik: Dalvik是Google公司自己设计用于Android平台的Java虚拟机.Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一. Da ...

  9. Dalvik和ART简单介绍

    1.classes.dex文件初识     我们先把QQ_236.apk后缀改为QQ_236.zip,然后解压.发现有一个classes.dex文件,这个classes.dex是java源代码编译后生 ...

随机推荐

  1. hadoop记录-hadoop常用

    1.hdfs目录配额 #设置配额目录hdfs dfsadmin -setSpaceQuota 10T /user/hive/warehouser/tmp查看配额目录信息hdfs dfs -count ...

  2. 用户认证授权和Shiro入门

    1.权限管理基础(认证和授权): 前言 本文主要讲解的知识点有以下: 权限管理的基础知识 模型 粗粒度和细粒度的概念 回顾URL拦截的实现 Shiro的介绍与简单入门 一.Shiro基础知识 在学习S ...

  3. 《JAVA并发编程实战》示例程序第一、二章

    第一章:简介 程序清单1-1非线程安全的数值序列生成器 import net.jcip.annotations.NotThreadSafe; @NotThreadSafe public class U ...

  4. C#代码使用Process类调用SWFTools工具

    一.Process类调用SWFTools工具将PDF文档转为swf文档 1 string cmdStr = "D:\\SWFTools\\pdf2swf.exe"; string ...

  5. vue 移动端项目总结(mint-ui)

    跨域解决方案 config/dev.env.js 'use strict' const merge = require('webpack-merge') const prodEnv = require ...

  6. 找出链表中倒数第K个结点

    思路:两个指针,也是快指针和慢指针,先让快指针走k -1步,这时慢指针开始和快指针一起走到尾部.慢指针停止的点就是倒数第k个节点. public static ListNode findCountDo ...

  7. 哇,快看,那里有React Native的坑

    一.红黑屏,我的天呀,怎么办?睡一觉吧 第一次玩React Native,按着文档来,跑着跑着,咦,红黑屏了. 怎么办?不玩了?那先放着,过两天再来看看咯. 二.粗心大意,原来还有配置没配好 好了,已 ...

  8. spring security 学习笔记

    官方文档

  9. spring boot 业务场景简单,代码完整的demo们

    源码地址:https://github.com/zhzhair/spring-boot-examples.git 开发环境:windows,jdk8,spring boot2.1.4

  10. 2018-2019-2 20165231《网络对抗技术》Exp0 Kali安装 Week1

    下载Kali Linux系统 进入官网进入下载页面,因为我们是在虚拟机内使用,而官网已经为我们提供了VM版的所以我就直接下载了这个版本的. 根据官网提示使用管理员帐号root(密码为toor)登录,创 ...