Android——区别DVM与JVM (2)

区别DVM与JVM

1.首要差别

Dalvik: 基于寄存器,编译和运行都会更快些

JVM: 基于栈, 编译和运行都会慢些

2.字节码的区别

Dalvik: 执行.dex格式的字节码,是对.class文件进行压缩后产生的,文件变小

JVM: 执行.class格式的字节码

3.运行环境的区别    

Dalvik : 一个应用启动都运行一个单独的虚拟机运行在一个单独的进程中

JVM: 只能运行一个实例, 也就是所有应用都运行在同一个JVM中

JVM和DVM的区别

  1. DVMDalvik Virtual Machine的缩写,是安卓虚拟机的缩写(为什么不叫AVM-Android Virtual Machine呢?原因是其作者以其祖上居住过的名为Dalvik的村子命名)。
  2. DVM是针对JVMJava Virtual Machine而言的,因为JVMOracle公司(原SUN公司)的产品,担心版权的问题,既然Java是开源的,索性就研究了JVM,写出了DVM
  3. JVMDVM主要区别如下:

a) 执行的直接码文件不一样

Java

.java文件 -> .class文件 -> .jar文件

Android

.java文件 –> .class文件 -> .dex文件

 

 

 

 

如上图所示,.jar文件里面包含多个.class文件,每个.class文件里面包含了该类的头信息(如编译版本)、常量池、类信息、域、方法、属性等等,当JVM加载该.jar文件的时候,会加载里面的所有的.class文件,这样会很慢,而移动设备的内存本来就很小,不可能像JVM这样加载,所以它使用的不是.jar文件,而是.apk文件,该文件里面只包含了一个.dex文件,这个.dex文件里面将所有的.class里面所包含的信息全部整合在一起了,这样再加载就很快了。.class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的.class文件整合到.dex文件中。减少了I/O操作,提高了类的查找速度.南京宝云java安卓课程打架报名啦!

 

b) 基于的架构不一样

Java基于栈的架构.栈是内存上面的一段连续的存储空间

Android基于寄存器的架构.寄存器CPU上面的一块存储空间

所以,CPU直接访问自己上面的一块空间的数据的效率肯定要大于访问内存上面的数据

原文地址:https://www.cnblogs.com/Chenshuai7/p/5277807.html