在Android的體系框架中有一部分叫做Android Runtime,即Android運行時環境,這個環境包括了兩個部分,一個是Android的核心類庫,還有一個就是Dalvik虛擬機了。
Android之所以開發Dalvik虛擬機而不使用JAVA自帶的JVM是出於以下兩點考慮(個人認為,不代表廣泛意義):
1.版權問題,如果使用JVM就涉及到了版權問題,所以google需要在JVM的基礎上做一些改進,創造自己的虛擬機。
2.性能問題。當然jvm虛擬機對Java開發來說性能已經足夠了,但是相對移動平台的特性,比如低內存,低電量等,就顯得有些牽強了,所以為了優化虛擬機的工作效率,google開發了android自己的虛擬機。
如上圖所示,jvm是吧.java文本編譯成.class字節碼文件,在執行java程序的時候,類加載器把需要的類全部加載到內存當中去。
上圖展示的是把字節碼文件載入到內存后的結構,每個Class文件被解析成了幾部分,包括了Header(主要是jdk的版本等)、常量等。。。
有多少個類,就會在內存中產生多少個上圖結構中的文件。
上圖所示是dalvik虛擬機加載的類文件結構圖。davik虛擬機把.java文件編譯成.class文件,又把.class文件轉換成.dex文件,dalvik來執行.dex文件。
實際上.dex文件就是把多個class文件中的常量、方法等放到一起。形成如上圖所示的結構。
在架構上jvm是基於棧的架構,所以每次訪問數據cpu都要到內存中取到數據。
而dalvik是基於寄存器的架構。寄存器是在cpu上的一塊存儲空間,cpu如果直接從寄存器上讀取數據的話就會快很多。