Android software stack

周阳波
2023-12-01

       Android software stack(C libraries and Java frameworks),  由Android runtime(Dalvik VM或者ART)协调管理。

一、Dalvik VM

      Dalvik VM是android平台第一个runtime,它是一个基于寄存器的虚拟机,用于在资源限制情况下高效的运行Java代码。虚拟机编译java代码,并使用dx工具,将其转换为dex格式,在linux进程中运行,拥有自己的存储空间和文件描述符,并管理自己的线程组。

      在一些高级架构中,一个Android应用会在一个单独的进程中运行一个service,使用IPC机制进行通讯,但是大多数情况下,都在自己单独的进程中运行。

      dex文件和应用程序的资源文件会被AAPT打包为一个Android application package,安装在设备上。

      从Android2.2,DVM就采用trace-based JIT特性来优化应用。

二、ART

    ART runtime是新版本的DVM,用来提高runtime性能和降低内存消耗。它在Android4.4版本作为试验runtime引用,从Android5.0,成为Android主要的runtime。

     ART采用了ahead-of-time(AOT)编译方法,带来了应用启动和执行时的性能优化。AOT与DVM JIT(Just In Time)相反,在应用安装时使用dex2oat工具来编译dex文件。dex2oat为目标设备生成系统无关代码,消除每个应用程序执行时JIT带来的延时。

三、Memory Sharing and Zygote

    基本上,Android平台上的每个程序运行一个DVM/ART实例。所有的应用程序都基于一个特殊的进程,称为Zygote,它在系统初始化时被启动。它会启动一个虚拟机,预先加载核心库,初始化各种共享的结构,然后通过监听一个socket来等待指令。当一个新的Android应用运行时,Zygote接收到创建一个虚拟机,运行该应用的指令。它通过复制已经预加载的VM进程,创建一个子进程的方式来完成指令。子进程会使用COW,copy-on-wirte技术,来和父进程共享一部分内存空间。COW技术,在大多数Unix系统上应用,仅仅在子进程要修改从父进程中克隆过的内存时,才分配新的空间。

      这个技术有一些非常好的优点: 首先,虚拟机和core libraries已经载入内存。不需要再从文件系统读取这些数据来动态初始化一个虚拟机。第二,core libraries和common structures的内存区域由Zygote和其它应用来共享,节省了大量空间。



    


 类似资料:

相关阅读

相关文章

相关问答