您的位置:首页 > 移动开发 > Android开发

android应用程序启动详情之Dalvik虚拟机

2017-03-13 15:17 232 查看
本文主要讨论Android启动一个应用时一些后台相关的流程。

Dalvik虚拟机  -》 进程启动 -》 创建UI线程

总体概念: 一个应用,一个虚拟机实例,一个进程,一个UI线程

1. Dalvik虚拟机基本知识介绍

基本概念

Dalvik虚拟机是Android程序的虚拟机,其指令集基于寄存器架构,执行其特有的文件格式——dex字节码,主要负责完成对象生命周期管理、堆栈管理、线程管理、安全异常管理、垃圾回收等重要功能。

android使用的Java代码,跟Java 虚拟机类似,是Android中Java程序的运行基础。

但是dalvik虚拟机与Java虚拟机有较大区别:

      1)、dalvik基于寄存器,而JVM基于stack

      2)、Dalvik执行的是特有的DEX文件格式,而JVM运行的是*.class文件格式。

优势:

      1)、在编译时提前优化代码而不是等到运行时

      2)、 虚拟机很小,使用的空间也小;被设计来满足可高效运行多种虚拟机实例。

      3)、常量池已被修改为只使用32位的索引,以 简化解释器

   以下是Android Dalvik虚拟机的架构



2、 Dalvik进程管理:

           dalvik进程管理是依赖于linux的进程体系结构的,如要为应用程序创建一个进程,它会使用linux的fork机制来复制一个进程(复制进程往往比创建进程效率更高)。

Zygote是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,它通过init进程启动。首先会孵化出System_Server(android绝大多系统服务的守护进程,它会监听socket等待请求命令,当有一个应用程序启动时,就会向它发出请求,zygote就会FORK出一个新的应用程序进程).每当系统要求执行一个android应用程序时,Zygote就会运用linux的FORK进制产生一个子进程来执行该应用程序。

          不同的应用在不同的进程空间里运行,当一个虚拟机关闭或意外中止时不会对其它 虚拟机造成影响,可以最大程度的保护应用的安全和独立运行。

         以下是Android Dalvik 在收到一个启动activity时fork一个进程的过程。



3. Android内存管理

关于内存管理这篇文章介绍的很详细:Android内存管理

这里主要介绍标注并清理回收法(Mark and Sweep GC)

在这个算法中,程序在运行的过程中不停的创建新的对象并消耗内存,直到内存用光,这时再要创建新对象时,系统暂停其它组件的运行,触发GC线程启动垃圾回收过程。内存回收的原理很简单,就是从所谓的"GC Roots"集合开始,将内存整个遍历一次,保留所有可以被GC Roots直接或间接引用到的对象,而剩下的对象都当作垃圾对待并回收

•标注(Mark)阶段:首先针对GC Roots中的每一个对象,采用递归调用的方式处理其直接和间接引用到的所有对象:

•清理(SWEEP)阶段:即执行垃圾回收过程,留下有用的对象,GC线程遍历整个内存,将所有没有标注的对象(即垃圾)全部回收,并将保留下来的对象的标志清除掉,以便下次GC过程中使用

4.  APK 生成过程





 参考资料:

Android Dalvik虚拟机初识

理解Android虚拟机体系结构


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: