1.Dalvik虚拟机和普通java虚拟机的区别:
a.dalvik虚拟机基于寄存器,java虚拟机基于栈
b.dalvik会通过dx将所有的class打包到dex文件,普通的java虚拟机将所有的class打包到jar文件
c.dalvik和普通java虚拟机使用的字节码不同,即class文件的格式不同,无法互通
2.每一个Android应用都运行在一个Dalvik以及Art虚拟机实例里,每个虚拟机实例都是一个独立的进程空间,每一个Android线程都依赖于独立的linux线程。
3 .Zygote进程在系统启动时创建,每一个Android应用的进程都是从Zygote进程fork出来的,因此可以共享Zygote进程已经加载的类,同时加快启动速度,共享代码空间。
4.从init.rc可以看到,zygote进程运行的可执行文件是是/system/bin/app_process,该进程会通过jni加载dalvik或者art虚拟机的so库,因此,zygote进程可以认为是系统启动后的第一个虚拟机进程。
5.Art虚拟机作为Dalvik的替代,其将dex中字节码的优化从应用运行时提前到应用安装时。
6. Art虚拟机完全兼容Dalvik虚拟机的字节码,也就是可以运行dex文件中的字节码。