Android的系统架构——安卓运行库
安卓运行库会有以下两个重要概念:
1、核心库。核心库提供了Java语言API中的大多数功能,同时也包含Android的一些核心API.如android.OS、android.net、android.media等。
2、Dalvik虚拟机。Android程序不同于J2ME程序,每个Android应用都运行在 自己的进程上,享有Dalvik虚拟机为它分配的专有实例,并在该实例中执行。Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈 的虚拟机,并进行了内存资源使用的优化以及支持多个虚拟机的特点。Java编译器将Java源文件转为class文件,class文件又被内置的dx[具 转化为dex格式文件.该格式文件针对最小内存使用做了优化.这种文件在Dalvik虚拟机上注册并运行。在一些底层功能方面,例如线程和低内存管理 等.Dalvik虚拟机是依赖Linux内核的。
对于1,只是一些API,我将重点介绍Dalvik虚拟机有关知识。
•什么是Dalvik虚拟机?
Dalvik虚拟机是Android程序的虚拟机,是Android中Java程序的运行基础。其指令集基于寄存器架构,执行其特有的文件格式——dex 字节码来完成对象生命周期管理、堆栈管理、线程管理、安全异常管理、垃圾回收等重要功能。它的核心内容是实现库(libdvm.so),大体由C语言实 现。依赖于Linux内核的一部分功能——线程机制、内存管理机制,能高效使用内存,并在低速CPU上表现出的高性能。每一个Android应用在底层都 会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。
•Dalvik虚拟机架构:
•从更宏观的角度看(Android应用编译及运行流程图)
•关于Dalvik虚拟机的一些知识
•关于dex格式的一些知识
dex字节码和标准Java的字节码(Class)在结构上的一个区别是dex字节码将多个文件整合成一个,这样,除了减少整体的文件尺寸,I/O操作,也提高了类的查找速度。
原来每个类文件中的常量池现在由DEX文件中一个常量池来管理。
DEX文件可以进行进一步优化(因为dex比jar文件更加紧凑所以采用dex文件,但dex依然需要进一步优化)。优化主要是针对以下几个方面:
1、调整所有字段的字节序(LITTLE_ENDIAN)和对齐结构中的没一个域
2、验证DEX文件中的所有类
3、对一些特定的类进行优化,对方法里的操作码进行优化
优化 优化后的文件大小会有所增加,应该是原DEX文件的1-4倍。
odex是为了在运行过程中进一步提高性能,对dex文件的进一步优化
•Dex文件生成过程
•Java虚拟机和Dalvik虚拟机的一些区别