dalvik和Jvm的区别

一、Dalvik简述

在Android的体系框架中有一部分叫做Android Runtime,即Android运行时环境,Android Runtime环境包括了两个部分,第一部门是Android的核心类库,第二部分是Dalvik虚拟机。

Dalvik虚拟机对内存具有高效的使用,以及在低速CPU上运行具有高性能。依赖于底层Posix兼容的操作系统,它可以简单的完成进程隔离和线程管理。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例, 其代码在虚拟机的解释下得以执行。Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容。

二、Dalvik和Jvm区别

Dalvik虚拟机运行的专有的文件格式Dex(Dalvik Executable)文件。Android应用虽然也是使用Java语言进行编程,但是在编译成class文件后,还会通过一个工具(dx)将应用所有的 class文件转换成一个Dex文件,而后Dalvik虚拟机会从其中读取指令和数据。Dalvik虚拟机运行的是其专有的文件格式Dex,Dex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。所有的Android应用的线程都对应一个Linux线程,虚拟机因此可以更多的依赖操作系统的线程调度和管理机制。

Java虚拟机运行java字节码。在Java SE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到jar文件,而后Java虚拟机会从相应的class文件和jar文件中获取相应的字节码

1.架构设计

Dalvik基于寄存器。寄存器是在cpu上的一块存储空间,cpu如果直接从寄存器上读取数据的话就会快很多。
JVM基于栈。所以每次访问数据cpu都要到内存中取到数据。

2.运行效率

Dalvik是基于寄存器效率高于基于栈的JVM。

3.编写语言

Dalvik是由C或C++编写,JVM是由C++或java编写。

4.运行环境

Dalvik在有限的内存,允许同时运行多个Dalvik实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。
JVM在有限的内存只能运行一个JVM实例,JVM因平台的不一样进程也不一样。

5.运行格式

Jvm一般是.class。jvm是把.java文本编译成.class字节码文件,在执行java程序的时候,类加载器把需要的类全部加载到内存当中去。
Dalvik是.dex 把.java文件编译成.class文件,又把.class文件转换成.dex文件,dalvik来执行.dex文件。

6.函数加载

Dalvik是Dexfile加载class类文件,JVM和KVM是ClassLoader。

7.版权归属

Dalvik归属google。
Jvm归属甲骨文。

0

发表评论

邮箱地址不会被公开。