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的实例。