Dalvik和ART

265 阅读1分钟

Dalvik虚拟机

1.DVM不是一个JVM:

基于的架构不同,JVM基于栈,DVM基于寄存器。

执行的字节码不同。

DVM允许同时运行多个进程。

DVM由Zygote创建和初始化。

DVM有共享机制。

DVM早期没有使用JIT编译器。

2.DVM架构

.class--{DX工具--.dex--Class Loader--字节码--[解释器,内存管理,线程管理]}(DVM)--Linux

3.DVM的运行时堆

Zygote Space + Allocation Space + Card Table + Heap Bitmap + Mark Stack

4.DVM的GC日志

打印到logcat中

ART虚拟机

1.与DVM的区别

AOT,JIT在运行中将热点代码编译成机器码;支持64位兼容32位CPU;改进垃圾回收机制;堆空间划分不同。

2.ART的运行时堆

采用标记-清除算法的运行时堆空间划分:

Zygote Space,Allocation Space,Image Space(存放预加载类,进程间共享),Large Object Space(大对象,12KB)

3.ART的GC日志

GC速度慢才会打印。

DVM和ART的诞生

诞生于Zygote进程,Zygote进程持有DVM或者ART的实例。此后创建应用程序进程时,应用程序进程也得到了DVM或者ART的实例。