Dalvik虚拟机、Java虚拟机与ART虚拟机

一、Java虚拟机

1. Java的是Java字节码。

传统的Java程序经过编译,生成Java字节码保存在class文件中,Java虚拟机通过解码class文件中的内容来运行程序。

2. Java虚拟机基于栈架构。

程序在运行时虚拟机需要频繁的从栈上读取或写入数据,这个过程需要更多的指令分派与内存访问次数,会耗费不少CPU时间。

二、Dalvik虚拟机(Android 4.4以前)

1. Dalvik虚拟机虚拟机运行的是Dalvik字节码。

所有的Dalvik字节码由java字节码转换而来,并被打包到一个DEX(Dalvik Executable)可执行文件中,Dalvik虚拟机通过解析DEX文件来执行这些字节码。

2. Dalvik可执行文件体积更小

Android SDK中的dx工具负责将Java字节码转换为Dalvik字节码,并对Java类文件重新排列,消除在类文件中出现的所有冗余信息,从而减少了冗余和重复的解析。

因为一般情况下,Java类文件中包含多个不同的方法签名,如果其他的类文件引用改该类文件的方法,方法签名也会被复制到其类文件中,也就是,多个不同的类会同时包含相同的方法签名,同样的,大量的字符串常量在多个类文件中也被重复使用。这些冗余信息会直接增加文件的体积,也会严重影响虚拟机解析文件的效率。

3. Dalvik虚拟机基于寄存器架构。

数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式要快很多。

三、ART虚拟机(Android 5.0后)

Dalvik虚拟机是执行的时候编译+运行,所以安装速度比较快,但是开启应用的时间较慢,应用占用空间小。(以空间换时间)

ART虚拟机是安装的时候就编译好,执行的时候就直接运行编译好的代码,所以安装速度比较慢,但是开启应用的时间快,占用空间较大。(以空间换时间)

apk包中除了一堆资源,还有一个重要文件classes.dex,此文件由java字节码优化打包而成,在Dalvik中,每次打开应用的时候,Dalvik会读取这个classes.dex并解释执行;而在ART环境下,当安装apk的时候,这个classes.dex文件就会被转换成本地机器码——后缀为oat的文件可直接供ART虚拟机使用,以后打开应用时直接读取oat文件执行即可。


#### YunSoul技术分享,扫码关注微信公众号##
  • ——只要你学会了之前所不会的东西,只要今天的你强过了昨天的你,那你就一直是在进阶的路上了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值