Android虛擬機與Java虛擬機 兩種虛擬機的比較


  • 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如果直接從寄存器上讀取數據的話就會快很多。


  • 免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM