Java基础之Dalvik和JVM的认识

来源:互联网 发布:电商淘宝培训 编辑:程序博客网 时间:2024/06/01 10:44

先介绍两个名词的意思:

寄存器:CPU内部用来存放数据的一些小型存储区域

栈:内存….内分分为堆和栈

想知道更多可以看看下面文章

栈式虚拟机和寄存器式虚拟机的对比

为什么寄存器比内存快?

在说Dalvik和JVM区别我觉得区别就在一个是Dalvik 基于寄存器,而 JVM 基于栈,出生不同决定以后用处不同

程序运行过程

  1. Java类会被编译成一个或者多个字节码文件(.class)然后打包到JAR文件
  2. Java虚拟机会从相应的CLASS文件和JAR文 件中获取相应的字节码
  3. 通过一个工具(dx)将应用所有的 CLASS文件转换成一个DEX文件
  4. Dalvik虚拟机会从其中读取指令和数据

从这个流程中可以看出最后还是Dalvik运行,特定的格式(dex)让他运行速度更快,据说也因为离CPU更近他更快….

因为内存如果不使用的话就会没电,进行停止,所以不好在栈中做很多控制,所以只能在在寄存器中做很多控制

最后的区别

  1. Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。
  2. Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。
  3. Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。
  4. 不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex,ex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。
  5. 所有的Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制