一、Android  System

Android系统从下到上分为Linux 内核、硬件抽象、系统库和Dalvik、Framework、应用层5大部分。

 

1、应用层

Android的应用程序主要是用户界面(User Interface)方面的,通常以JAVA程序编写,其中还可以包含各种资源文件(放置在res目录中)JAVA程序及相关资源经过编译后,将生成一个APK包。

Android本身提供了主屏幕(Home),联系人(Contact),电话(Phone),浏览器(Browers)等众多的核心应用。

同时应用程序的开发者还可以使用应用程序框架层的API实现自己的程序。

 

2、Framework层

Framework层为应用层提供各种接口API,包括各种组件和服务来支持我们的安卓开发,包括ActivityManagerService、WindowManagerService、PackageManagerService、NotificationManagerService 、ResourceManagerService、Telephony Manager Service 、Location Manager Service等服务和View System 、ContentProviders。

 

3、系统库和Dalvik

该层分为两部分:系统库和Dalvik。

系统库

在Linux内核之上,Android提供了各种C/C++核心库(例如Libc和SSL)、视频音频相关的媒体库、外观管理器。基于2D、3D图形SGL和OpenGL图形库、用于本地数据库支持的SQLite,以及用于集成web浏览器和Internet安全的SSL和WebKit。

 

Dalvik

Android 运行环境主要指的虚拟机技术——Dalvik。Dalvik虚拟机和一般JAVA虚拟机(Java VM)不同,它执行的不是JAVA标准的字节码(bytecode )而是Dalvik可执行格式(.dex)中执行文件。在执行的过程中,每一个应用程序即一个进程(Linux的一个Process)。 二者最大的区别在于Java VM是以基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。

 

4、硬件抽象层:

介于Linux内核和系统运行层,它是对下层Linux驱动的统一封装,并且对上层提供接口,隐藏了底层的细节。它运行在用户空间(User Space ),这样的一层就是专门为各个厂商服务,为其设计自己的风格。

 

5Linux 内核:Android核心系统服务依赖于Linux内核,包括安全性、内存管理、进程管理、网络协议和驱动模型等。Linux内核也同时作为硬件和软件栈之间的抽象层。

深入理解各层级:https://www.jianshu.com/p/e1dfb6c0a70e

 

二、JVM、Dalvik区别

1、Dalvik 基于寄存器,而 JVM 基于栈。

JVM 的执行的指令是基于栈结构,这就意味着需要去栈中读写数据,所需的指令会很多,会导致速度变慢,对于性能有限的移动设备,显然不合适。DVM 是基于寄存器的,没有基于栈的虚拟机在复制数据时使用的大量的出入栈指令,同时指令更紧凑、更简介。但是由于指定了操作数,所以指令会比基于栈的指令大,但是由于指令数量的减少,总的代码不会增加多少。
2、JVM运行class文件,Dalvik运行Dex文件

3、回收机制不同,Dalvik进行GC的时候会单独申请一块空间,以位图的形式来保存整个堆上的对象的标记,在GC结束后就释放该空间。

 

三、Dalvik与ART(5.0默认)区别

1、DVM 中的应用每次运行时,字节码搜需要通过 JIT 编译器编译成机器码,这会使得应用程序的运行效率降低。而在 ART 中,系统在安装应用程序时会进行一次 AOT(ahead of time compilation, 预编译),将字节码预先编译成机器码并存储在本地,这样应用程序每次运行时就不需要执行编译了,运行 效率会大大提升,设备的耗电量也会降低。

AOT 也有缺点,主要有两个:第一个是 AOT 会使得应用程序的安装时间变长,尤其是一些复杂的应用;第二个是字节码预先编译成机器码,机器码需要的存储空间会多一些(字节码变机器码后,可能增加10%-20%)。为了弥补以上两个缺点,Android 7.0 版本的 ART 加入了即时编译器 JIT,作为 AOT 的一个补充,在应用程序安装时不会将字节码全部编译成机器码,而是在运行种将热点代码编译成机器码,从而缩短了应用程序的安装时间并节省了存储空间。

2、DVM 时为 32 位 CPU 设计的,而 ART 支持 64 位并兼容 32 位 CPU,这也是 DVM 被淘汰的主要原因之一。

3、ART 对垃圾回收机制进行了改进,比如更频繁地执行并行垃圾收集,将 GC 暂停由 2 次减少为 1 次等。

4、ART 的运行时堆空间划分与 DVM 不同。

参考:https://www.jianshu.com/p/a37d3be0a341