Android为什么需要虚拟机(DVM)?

问题描述:

虚拟机用于在不同操作系统上运行应用程序(Java将代码编译为独立于操作系统的.class文件,并将其解释为字节码)。由于android应用运行在同一个操作系统(即Android)上,因此它不需要虚拟机(我可能在这里是错误的)。那为什么它需要一个Dalvik VM?Android为什么需要虚拟机(DVM)?

Android平台可以在不同的架构上运行 - ARM,MIP和x86。为了抽象出编译每个体系结构的二进制文件的需求,虚拟机开始发挥作用。它也为开发人员提供内存管理。

我们需要有人来编译和Java类转换成可以被解释执行的字节码。

它类似于JVM ...你有.java文件,它将被java编译器编译成.class文件。 .class文件不过是由JVM运行的字节码。 JVM可以驻留在任何平台上(windows,linux或unix)。

在android中,文件也被编译成.dex文件并由DVM运行。只是为了提供一个想法,安装应用程序时,Android OS会分配唯一的Linux用户ID,并为每个应用程序分配一个DVM。总之,每个应用程序都有自己的Linux进程,DVM和Linux用户标识。

Java文件被编译成它消耗相比.class文件存储器更少.DEX文件。

现在假定10个应用程序有10个独立的DVM,并且操作系统有10个进程需要处理。

在Android OS调度员或调度负责处理这10个过程....这就是为什么我们的Android活动的生命周期。

您需要DVM来维护每个进程(每个应用程序)的运行状态。

为什么机器人需求的虚拟机的基础上,谷歌的Android设计的API,极大地使用Java接口。 Java本身通常运行在虚拟机上。

JVM本身是一个基于堆栈机器的VM,而Android的虚拟机(称为Dalvik)是一个基于寄存器的虚拟机(这是为了减少代码生成和更快的速度获得更好的性能,无论使用Android的任何设备)

虚拟机的目的是通过模拟它能够抽象硬件。如果你制作一个虚拟机并编译它以在所有可能的硬件上运行,你就会得到最初使Java变得流行的原因:一次编写一次可移植性。

你可以写代码,而无需改变它,在你的虚拟机可以运行在任何硬件上运行。

Digressing,Android主要是用C(和C++?)构建的,但操纵操作系统的API是通过Java接口的,因此您需要一个虚拟机。