ART虚拟机特点与组件

10 篇文章 1 订阅

原文地址:ART虚拟机特点与组件


接下来以Android-5.1.1-R14版本的源码介绍ART虚拟机的相关知识,本来不想对Dalvik多说的,可是发现Dalvik虽然已经退休了,但其影响力依然不小,ART中很多地方都引用了其中的内容,而且最近的项目
也需要对Dalvik定制,所以可能会穿插Dalvik的内容。

ART简介

Android 4.4开始引入ART虚拟机,Android 5.0开始正式取代Dalvik,成为Android默认虚拟机。

Dalvik被抛弃的原因:

1). 解释执行太慢了,IOS可是直接运行的本地机器码!!Google在Android 2.2中引入JIT即时编译,然并卵!

2). JIT即时编译后的native代码存放在内存中,下次重新启动程序后,还要再次JIT。

3). 垃圾回收时容易导致程序挂起或者暂停,而且回收效率也不是很高。

4). Dalvik仅仅支持32bit 处理器!!!!

5). 其他性能原因,如过耗CPU进而影响续航。

虚拟机优化技术

虚拟机常用优化技术有两种:JIT和AOT

JIT:

最开始指在执行前编译,但是到现在已经发展成为,一开始解释执行,只有被多次调用的程序段才被编译,编译后存放在内存中,下次直接执行编译后的机器码。

两种方式:
method方式:以函数或方法为单位进行编译

trace方式:以trace为单位进行编译(可以把循环中的内容作为单位编译),此方法也包含method。

AOT

在程序运行前就编译成机器码,并存储在本地存储器中,以加快运行程度,用此种方式,可执行的程序会变大四五倍。ART虚拟机采用了此优化方案。

ART特点

1). 采用AOT预编译优化技术

2). 支持64bit处理器

3). 新添加多种垃圾回收算法,支持动态压缩内存,减少内存碎片,降低内存溢出概率,在垃圾回收频率降低的情况下,回收效率提升50%以上

4). 系统自身占用空间可能会增加不少

5). 续航提升,降低硬件要求,系统更流畅

6). App第一次安装启动时较慢,因为要对其进行AOT预编译,所占用的空间也增大

ART 策略就是“空间换时间”。

ART组件

ART源码目录:Android源码/art。

编译之后主要生成:

1).libart-compiler.so:主要负责将dalvik机器码翻译为本地机器码

2).dex2oat:是一个可执行程序,用来将dex文件转换为oat文件

3).libart.so:ART虚拟机运行时,app_process可执行程序在启动zygote前,会调用该库启动ART虚拟机

4). patchoat:是一个可执行程序,ART启动时用来重定位boot.oat和boot.art

ART可执行文件

ART虚拟机支持三种文件:boot.art,boot.oat,.dex文件。

其中boot.art是一个img文件,ART虚拟机不能单独运行他,需要和boot.oat一起才能被ART虚拟机所解析,而且这两个文件也是ART虚拟机自身运行其他java程序十分重要的一部分。

这里的.dex文件非Dalvik中的dex文件,别看后缀是一样的!!!这些dex文件是dex2oat命令将Apk或者jar包中的原始Dalvik dex文件编译而来的。

ART可执行文件是一个特殊的ELF文件。ELF文件是linux下常见的文件格式,包括:

1).可执行文件

2).共享库,例如so库

3).可重定位文件,对于的编译器生成的.o文件

ART实际上是一个共享库,利用readelf命令可以看出来:

calculator.dex是从计算器的oat文件。可以从运行Android 5.0以上系统的手机

1
/data/dalvik-cache/arm[32/64]/

下查找其他App的Oat文件。要注意,后缀虽然还是dex,但是它们都已经不是Dalvik的dex可执行文件了!!!不要被后缀迷惑了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值