DVM,ART与JVM区别

DVM和ART是谷歌为Android量身定做的java虚拟机,由于android最初设计是用于手机端,对内存要求很高,Android DVM有独有的优化措施

Dex文件代替class文件

JVM把java源文件转换成.class文件,DVM,ART把class文件进行合并,去除冗余信息,生成DEX文件,文件结构比较紧凑,dex解析的时候,可以减少IO操作,使得查询速度更快

Dex文件生成步骤

  1. javac 把源文件编译成class文件
1.javac Dex1.java --> Dex1.class
2.javac Dex2.java --> Dex2.class
  1. jar打包class文件
jar cvf AllDex.jar Dex1.class Dex2.class
  1. dx生成dex文件
dx --dex --output AllDex.dex AllDex.jar
  1. dexdump 反编译dex文件
dexdump -d -l plain AllDex.dex

实际上Dex文件在安装过程中还会进一步优化成odex(optimized dex)文件

65535问题
dex文件方法数,属性个数,类个数都不能超过65535;解决方法就是用multiDex

架构基于寄存器&基于堆栈结构

JVM计算基于操作数栈,DVM,ART基于Android系统模拟的寄存器;他们指令集不同,相对与JVM指令集更长,但是缩短了指令数目

内存管理与回收的不同

DVM 与 JVM 对堆内存管理不同;
DVM 把堆内存分为2部分: Active Heap 和 Zygote Heap

Android第一个进程是Zygote创建,之后的进程都是Zygote孵化的,在创建新的虚拟机实例,Zygote会复制本身,但是对于一些只读雪,所有zygote是共享的,并不需要复制,大大节省了内存开销

ART相对于JVM有什么优化

art在4.4时候发布的代替dvm的虚拟机,在4.4时默认采用的还是dvm,但是也可以选择art。然而在5.0以上的版本,Android默认采用了art

art采用了aop技术,安装程序时,将字节码预先编译成机器码并存储在本地,这样应用程序可以不再次编译后才能启动程序

JIT 与 AOP

JIT是"Just In Time Compiler"的缩写,就是"即时编译技术",与Dalvik虚拟机相关
AOT是"Ahead Of Time"的缩写,指的就是ART(Anroid RunTime)这种运行方式

  • 在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。之后打开App的时候,不需要额外的翻译工作,直接使用本地机器码运行,因此运行速度提高。
  • ART需要应用程序在安装时,就把程序代码转换成机器语言,所以这会消耗掉更多的存储空间
  • ART是安装时解释,Dalvik是运行时解释

DVM,ART,JVM之间的关系相关推荐

  1. ART与Dalvik、JVM之间的关系你懂了吗?

    Android 高阶知识 博客系列目录 类加载机制原理解析 ART与Dalvik.JVM之间的关系你懂了吗? ART与Dalvik.JVM 认识了解虚拟机 JVM Dalvik ART 即时编译器(J ...

  2. Java 入门之1:浅谈Java的最基本概念及JDK、JRE、JVM之间的关系和区别

    目录 前言: 一句话介绍Java语言的故事 一句话概括Java的特性和优势 两句话阐述JAVA_HOME环境变量和classpath环境变量的作用是什么 简述JDK.JRE.JVM之间的关系 Java ...

  3. JDK、JRE和JVM之间的关系

    作为一个Java开发者,只会用Java,却不知什么是JDK.JRE和JVM是什么,以及他们之间有什么联系.本文总结了JDK,JRE,JVM三者的关系与区别. JDK.JRE和JVM之间的关系 一.JD ...

  4. Java中JDK,JRE和JVM之间的关系

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...

  5. JDK/JRE/JVM之间的关系

    > JDK Java Development ToolKit(Java开发工具包). JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆J ...

  6. 浅谈JDK、JRE、和JVM之间的关系

    基本概念 JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK).JDK不仅包括开发者需要的开发者环境,同时包括有程序运行所需要的支持环境JRE. JRE(J ...

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

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

  8. JVM,DVM,ART

    JVM 可以把Java程序设计语言.Java虚拟机和Java API类库这三部分统称为JDK(Java Development Kit),它是Java程序开发的最小环境.另外,Java API中的Ja ...

  9. 一次性掌握JDK、JRE、JVM的概念以及三者之间的关系【2021整理】

    一.JDK.JRE.JVM概念解析 JDK(Java Development Kit):Java开发工具包,开发人员用来构建Java应用程序的软件包. JRE(Java Runtime Environ ...

最新文章

  1. wireshark 抓包再利用TCP socket发送包里的payload是可以实现登陆的
  2. 查看电脑python虚拟环境-手把手教你在Linux系统下使用Python虚拟环境
  3. 【洛谷】P1388 算式(dp)
  4. 岳西中自机器人_中国科学院
  5. NOIP2005普及组第3题 采药 (背包问题)
  6. .Net Core 2.1 通用主机(Core 在控制台应用程序中的应用)
  7. 你一直憋着的那个屁,放出来时真的有人知道吗?我先告诉你憋着不放的屁会到哪去……...
  8. python代码封装加密_静态编译python源代码,使用Nuitka加密你的py源码
  9. (转)使用Spring配置文件实现AOP
  10. js 快速集成开发:easyui 时间控件格式化
  11. 2014腾讯实习生笔试题——define与typedef
  12. harmonyos2.0三大技术特点,科普干货|漫谈鸿蒙LiteOS-M与HUAWEI LiteOS内核的几大不同...
  13. 【渝粤教育】国家开放大学2019年春季 1067知识产权法 参考试题
  14. Linkedin如何避免封号
  15. 关于线程耗尽导致请求超时系统假死的思考
  16. Ubuntu 16.04下设置开机时自动开启NumLock
  17. Android开机速度优化 Android 开机时间优化
  18. 2dlda人脸识别 matlab,利用2DPCA和2DLDA在ORL人脸数据库上做的人脸识别实验
  19. 《C语言入门经典》Ivor Horton第十章练习题1
  20. 不要急,没有一朵花,从一开始就是花,也不要嚣张,没有一朵花,

热门文章

  1. 【HTTP Status 500 - Servlet execution threw an exception】
  2. LINUX IIO子系统分析之二 IIO子系统相关数据结构分析
  3. 复习单片机:点亮LED(内含实物图+硬件设计+软件编程+原始代码)
  4. Django项目:LOL学院学员管理系统
  5. android系统profile文件路径,Android Profile Tools 入门
  6. PEST分析顺丰服务需求_顺丰内外部环境分析.doc
  7. Notepad++ 无法安装 HexEditor 插件 / 安装之后闪退
  8. 【hihoCoder】#1615 : 矩阵游戏II
  9. MacBook Pro维修过程
  10. 惊喜,Windows 11 竟然支持运行安卓应用,而且开发者收益 0 抽成,PC 端摸鱼不是梦...