先介绍两个名词的意思:
寄存器:CPU内部用来存放数据的一些小型存储区域
栈:内存…分为堆和栈
想知道更多可以看看下面文章
在说Dalvik和JVM区别我觉得区别就在一个是Dalvik 基于寄存器,而 JVM 基于栈,出生不同决定以后用处不同
程序运行过程
- Java类会被编译成一个或者多个字节码文件(.class)然后打包到JAR文件
- Java虚拟机会从相应的CLASS文件和JAR文 件中获取相应的字节码
- 通过一个工具(dx)将应用所有的 CLASS文件转换成一个DEX文件
- Dalvik虚拟机会从其中读取指令和数据
从这个流程中可以看出最后还是Dalvik运行,特定的格式(dex)让他运行速度更快,据说也因为离CPU更近他更快…
因为内存如果不使用的话就会没电,进行停止,所以不好在栈中做很多控制,所以只能在在寄存器中做很多控制
最后的区别
- Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。
- Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。
- Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。
- 不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex,ex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。
- 所有的Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制