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文件中的字節碼。