美文网首页
Android虚拟机

Android虚拟机

作者: 闲相思 | 来源:发表于2018-02-09 16:34 被阅读32次

Android虚拟机

与JAVA虚拟机不同,JAVA虚拟机是栈机,而Dalvik VM是基于寄存器的架构。总的来说,基于栈的机器必须使用指令来载入栈上的数据,或使用指令来操纵数据,因此需要的指令更多。


Dalvik VM主要特征

  • 一个应用中会有很多的类,编译后生成对应的class文件,而.dex文件格式会把所有的.class文件内容整合到一个文件中,除了减少了文件大小也提高了查找速度。原来每个类文件中的常量池在.dex文件中由一个常量池来管理。
  • 每一个Android应用都运行在一个独立的Dalvik VM实例中,每一个虚拟机实例都是一个独立的进程空间。所有应用的线程都对应一个Linux线程。不同应用在不同的进程空间里运行,对不同来源的应用都使用不同的Linux用户来执行,可以保护应用的安全。
  • Zygote是一个虚拟机进程,同时也是虚拟机实例的孵化器。Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化,库的加载,预置类库的加载等操作,在系统需要一个新的虚拟机实例时,Zygote通过自身复制最快速的提供一个系统。
  • 对于基于堆栈的虚拟机实现,基于寄存器的虚拟机虽然在硬件通用性上要差一些,但是在代码的执行效率上更胜一筹。基于寄存器的虚拟机可以更加有效的减少冗余指令的分发和内存的读写访问。

Dalvik VM和JAVA虚拟机的差异

  • Dalvik VM有自己的bytecode,并非使用JAVA字节码。
  • Dalvik VM基于寄存器,而JVM基于堆栈。
  • Dalvik VM通过Zygote进行Class PreLoading,Zygote会完成虚拟机的初始化

Dalvik的进程管理

  • Dalvik进程管理是依赖与Linux的进程体系结构,如果为应用程序创建一个进程,他会使用Linux的fork机制来复制一个进程(复制的效率往往比创建更高)
  • Zygote是一个虚拟进程,通过init启动。首先会孵化出System_Server(Android绝大多系统服务的守护进程,它会监听socket等待请求命令,当应用程序启动时就会发出请求,Zygote就会孵化出一个新的应用进程)。
  • 每当系统执行一个Android程序时,Zygote机会使用Linux的fork机制产生一个子进程。

Android初始化流程

image

相关文章

网友评论

      本文标题:Android虚拟机

      本文链接:https://www.haomeiwen.com/subject/lbxqtftx.html