dvm 与 jvm区别

本片文章重点参考《Android进阶解密》

1.基于架构不同

jvm 基于栈,需要去栈中读取数据,需要的指令多,效率慢(栈是内存上面的一段连续的存储空间)

dvm是基于寄存器(寄存器是CPU上面的一块存储空间),没有类似jvm的栈操作指令(大量的出入栈打的指令)

2.执行的字节码不同

jvm是把java类编译成一个或者多个的.class文件,然后打包成jar文件的。

dvm在jvm的基础上再把.class文件转化成.dex文件。原因是因为jvm加载jar比较慢,不适合在移动设备使用。.dex将所有的.class中包含的信息全部整合到一起了,这样就加快的加载速度。同时在转化的过程中也会去除一些无用的信息(多个class中的字符串常量合并为一个,比如对于Ljava/lang/Oject字符常量,每个class文件基本都有该字符常量,存在很大的冗余)。

3.dvm允许在有限的内存中同时运行多个进程

dvm经过优化之后允许有限的内存中同时运行多个进程。在Android中的每一个应用都运行在一个dvm实例中,每一个dvm实例都运行在一个独立的进程空间中,独立的进程可以防止在一个应用崩溃之后所导致其他的应用收到影响

4.dvm由Zygote创建和初始化

 

5.dvm具有共享内存机制

dvm有预加载——共享的机制,不同的应用之间可以在运行是共享相同的类,提高了效率。而jvm则是相互独立的

6.dvm早期没有jit编译器

 

你可能感兴趣的:(Android,java,jvm,dvm)