Android DVM

  1. Android运行环境主要指的虚拟机技术—Dalvik.
  2. Android中的所有Java才程序都是运行在Dalvik vm上的,Android上的每个程序都有自己的线程,DVM执行的是.dex的Dalvik excutable文件,每个Android应用有一个独立的DVM实例并在其解释下执行。每一个应用程序既是一个进程(Linux的一个process)。Android中Java程序通过编译后,还需要通过SDK中的dex工具转化为.dex格式。DVM再从中读取指令和数据。
  3. Jvm和DVM的区别:
  • DVM虽然也是用Java编程语言,Dalvik虚拟机和一般Java虚拟机并不兼容。
  • Jvm执行.class字节码文件,而DVM执行其专有的.dex文件。
  • Jvm是基于栈(Stack-based)的虚拟机,需要存取指令来进行操作栈里面的数据,因此需要更多的指令。DVM是基于寄存器的虚拟机(Register-based),可以直接在寄存器里面获取数据。后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点,虽然通用性差了点外,但是代码的执行效率高。
  • 总之,DVM非常适合用于移动终端上,与pc相比,它不需要很快的CPU与大量的内存空间。
  • 将class文件转换成dex文件的原因,class文件中包含大量的陈余信息,dex文件格式会把所有的class文件内容整合到一个dex文件中减少整个文件尺寸和IO操作,也提高查找速度。文件结构简单,使用等长指令,借以提高解析速度,支持新的操作码。常量池已被修改为只使用32位的索引,以 简化解释器。dalvik的堆和栈的参数可以通过-Xms和-Xmx更改。

4. Dalvik进程管理:

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

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

JVM和Dalvik进程管理:

linux中进程间通信的方式有很多,但是dalvik使用的是信号方式来完成进程间通信。

原文地址:https://www.cnblogs.com/hupp/p/4709060.html