热修复Android开发经验·源码分析

Android类加载(一)——DVM、ART、Dexopt、De

2020-03-08  本文已影响0人  程序员三千_

Android类加载(一)——DVM、ART、Dexopt、DexAot名词解析
Android类加载(二)——双亲委托机制
Android类加载(三)——源码解读

JVM和DVM

DVM基于寄存器,JVM基于栈

寄存器是CPU上面的一块存储空间,栈是内存上面的一段连续的存储空间,所以CPU直接访问自己上面的一块空间的数据的效率肯定要大于访问内存上面的数据。基于栈架构的程序在运行时虚拟机需要频繁的从栈上读取或写入数据,这个过程需要更多的指令分派与内存访问次数,会耗费不少CPU时间,对于像手机设备资源有限的设备来说,这是相当大的一笔开销。DVM基于寄存器架构。数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式要快很多。

执行的字节码文件不一样

DVM执行的是.dex文件,JVM执行的是.class文件。

DVM解释执行的是dex字节码.dex:.java –> .class –> .dex –> .apk

JVM运行的是java字节码.class:.java –> .class –> .jar

本质上java文件编译后都是字节码,只不过JVM运行的是.class字节码,而DVM运行的是.dex字节码

ART与Dalvik

Dalvik:Dalvik是谷歌公司自己设计用于Android平台的Java虚拟机(DVM)。支持已转换为.dex格式的应用程序的运行。.dex格式是专门为DVM设计的一种压缩格式,适合内存和处理器有限的系统,例如Android系统。(DVM负责解释.dex文件为机器码)

ART:Android Runtime,Android4.4中引入的一个开发者选项,也是Android5.0及更高版本的默认模式。在应用安装的时候把字节码预编译成机器语言,这一机制叫做Ahead-Of-Time(AOT)预编译。这样应用程序虽然安装会很慢,但是执行效率将更高,启动更快。

Dexopt与DexAot

上一篇 下一篇

猜你喜欢

热点阅读