Dalvik虚拟机

Dalvik虚拟机是Google区Android平台开发的虚拟机,它是Adnroid4.4以前的应用的解释执行器。Dalvik虚拟机并不是Java虚拟机(JVM)的替代器。

Dalvik虚拟机与Java虚拟机最大的不同就是Dalvik是基于寄存器,而Java虚拟机是基于栈的。为什么为这样呢?首先,Java高级程序语言是为了跨平台而被设计出来的,在运行前需要通过编译程序将Java代码翻译成中间代码(字节码)来解释执行。为了实现跨平台,生成的中间代码就没有使用寄存器,而是完全是靠堆栈来表示变量。而Dalvik一开始是为了运行在嵌入式设备上,对性能比较看重,所以采用了寄存器来表示变量,没有过多考虑跨平台的问题。

Dalvik采用了寄存器来表示变量后,JVM的字节码就无法使用了,于是Google就开了一套新的指令作为Dalvik虚拟机的中间代码,因此Android使用Dex文件格式来代替JVM的CLASS文件。Dalvik来了支持寄存器表示变量,它的指令一条需要两个字节,而JVM只需要一个字节。Dalvik中使用的寄存器,一部被映射到arm的寄存器,另一部还是用堆栈在模拟。

Dex文件格式作了如下改进:

  • 生成Dex文件时,会把所有Class文件整合到一个Dex文件中,同时对所有类进行优化合并,去除冗余的信息,这样既减少了文件的大小,又提高了类的装载速度
  • Dex文件会把每个类文件的常量池进行分解合并,最后放在一个常量池中,节约了内存的使用
  • Dex文件中所有类推字符串常量也会被整理合并成一份
  • Dex文件中的签名只有一份,验证也只有一次
  • Dalvik虚拟机为应用创建的线程都是Linux线程,通过Linux内核来管理线程,提高效率。
    垃圾回收算法一般有“标记并清理法”、“拷贝法”、”引用计数法“、"逐代回收法“。Dalvik虚拟机实现了”标记并清理法“、”拷贝法“两种算法。Dalvik默认是使用“标记清理法”来进行垃圾清理。如果要使用“拷贝法”,则需要在编译时指定编译变量WITH_COPYING_GC为true。

“标记并清理法”:在对象分配时不加干涉,会一直分配内存,直到达到上限,然后把所有无关的线程挂起,运行一个固定的垃圾回收线程回收内存。回收算法分为两步:
1.给所有不需要回收的对象做标记
2.把所有未标记的对象释放掉。

“标记并清理法”很好解决了“引用计数法“出现的”循环引用“问题,缺点是每次清理必须暂停正常的工作线程,而且回收处理的时间也比较长。暂停工作线程的原因是”标记并清理法“找到需要回收的对象需要遍历系统中所有对象来确定对象的使用情况,因此其他的工作线程必须先停止工作。

ART虚拟机

ART虚拟机相对Dalvik虚拟机而言,它的性能提升了很多,支持配置更低的设备。但是ART虚拟机会比较消耗内存,因为ART编译出来的文件会比以前大10%~20%,而且安装时间会Dalvik要长。因为应用会被编译成可执行代码,在下次执行是就不需要再解析和执行字节码了。

ART虚拟机使用的垃圾回收算法与Dalvik一样,都是”标记并清理法“。

谢谢阅读。

Dalvik虚拟机、ART虚拟机相关推荐

  1. android art 远程控制,IT之家学院:认识Android中的Dalvik与ART虚拟机

    又是一年高考时啊,在文章开始之前,IT之家先祝各位高考考生金榜题名~ 每到这个时候,小编就会想起自己的高三时光和高考经历,那段时光真是让人难忘.提起高三生活,可能很多同学都会想到桌子上堆得厚厚的书,黑 ...

  2. Dalvik 和 ART虚拟机

    1. Dalvik 虚拟机 Dalvik 虚拟机(Dalvik Virtual Machine),简称 Dalvik VM 或者 DVM.它是 Google 专门为 Android 平台开发的虚拟机, ...

  3. Dalvik虚拟机ART虚拟机

    ·Dalvik虚拟机和Java虚拟机的区别 1 Java虚拟机运行的是Java字节码,Dalvik虚拟机运行的是Dalvik字节码. 传统的Java程序经过编译,生成Java字节码保存在class文件 ...

  4. android dalvik虚拟机的作用,IT之家学院:认识Android中的Dalvik与ART虚拟机

    又是一年高考时啊,在文章开始之前,IT之家先祝各位高考考生金榜题名~ 每到这个时候,小编就会想起自己的高三时光和高考经历,那段时光真是让人难忘.提起高三生活,可能很多同学都会想到桌子上堆得厚厚的书,黑 ...

  5. 移动安全--7--JVM / Dalvik / ART虚拟机

    7-1.关于Dalvik和ART虚拟机 1.Android4.4之前的Android运行时是Dalvik虚拟机.它使用即时编译. 2.Android4.4中引入了ART虚拟机,但默认的Android运 ...

  6. 面试关于jvm、dvm和art虚拟机区别

    一.Dalvik与JVM的区别 1.首先最主要的区别,Dalvik 基于寄存器,而 JVM 基于栈.那么什么是基于寄存器什么是基于栈呢? 有关寄存器可以参照百度百科的内容,下面是一段摘抄: 寄存器是中 ...

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

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

  8. 【Java 虚拟机原理】动态字节码技术 | Dalvik ART 虚拟机 | Android 字节码打包过程

    文章目录 一.动态字节码技术 二.Dalvik & ART 虚拟机 三.Android 字节码打包过程 总结 一.动态字节码技术 动态字节码技术 就是在 运行时 , 动态修改 Class 字节 ...

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

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

最新文章

  1. 在YII2框架中使用UEditor编辑器发布文章
  2. SpringBoot面向切面编程-用AOP方式管理日志
  3. 细胞培养中出现黑胶虫污染处理方法
  4. CVPR 2021 | 自适应激活函数ACON:统一ReLU和Swish的新范式
  5. 手工备份与还原Windows8激活文件
  6. 20155230 2016-2017-2《Java程序设计》课程总结
  7. SQLSERVER 2008 R2下载安装教程
  8. Linux下安装Java运行环境
  9. idea切换工作目录后无法重启问题记录
  10. 三国管理智慧之刘备的管理之道
  11. 使用火焰图(FlameGraph)分析程序性能
  12. STM32 串口的使用
  13. Ubuntu 8.04 LTS 安装
  14. 泛微OA自开发初始应做哪些
  15. MPB:中科院城环所杨军组-​​基于DNA宏条形码的水体微型真核生物群落测序建库方法...
  16. Android的USB通信(AOA连接)
  17. 免费开源好看的bootstrap后台模板
  18. 如何实现100家快递单轨迹推送?
  19. 开关电源的纹波和噪声
  20. 【Simulink教程案例1】基于Simulink的PID控制器设计与实现

热门文章

  1. MOS管功率放大电路图和互补推挽结构分析-KIA MOS管
  2. Lua源码笔记--字符串连接
  3. MAC中IntelliJ Idea常用快捷键
  4. 图像降噪算法——图像降噪算法总结
  5. C语言基础知识-数组和字符串
  6. Linux中录制并回放终端会话
  7. USB3.0 U盘速度慢的常见问题
  8. Linux初级运维常用命令面试问题
  9. 天线的原理、分类及要求
  10. COSMIC案例:发票处理功能的规模度量