java jvm和android DVM區別

來源:互聯網
上載者:User

標籤:執行個體   移動   受限   格式   程式   視圖   term   table   分配   

  本文轉自:http://blog.csdn.net/yujun411522/article/details/45932247  1. Android dvm的進程和Linux的進程, 應用程式的進程是否為同一個概念?
Dalvik虛擬機器允許多個instance的存在。實際上android中的每一個app都是運行在自己VM執行個體之中(沙箱)。每一個VM執行個體在linux中又是一個單獨的進程,所以可以認為是同一個概念。運行在自己的DVM進程之中,不同的app不會相互幹擾,且不會因為一個DVM的崩潰導致所有的app進程都崩潰。1.1 什麼是Dalvik虛擬機器?java的運行需要JVM(後面有大量篇幅介紹),同樣android中使用了java語言,也需要一個VM。針對手機處理器和記憶體等硬體資源不足而推出來的一款VM,為android運行提供環境。  2.與JVM的區別
2.1.基於架構的不同。JVM是基於 的架構,而DVM是基於 寄存器架構。
2.1.1 為什麼JVM設計成基於棧架構,DVM是基於寄存器架構?    優點: a.基於棧架構的指令集更容易產生(http://rednaxelafx.iteye.com/blog/492667);
           b.節省資源。其零地址指令比其他指令更加緊湊
           c. 可移植性。考慮到JVM使用的場合大多是pc和伺服器,這類機器的處理器中通用寄存器的數量不盡相同,如果使用基於寄存器其功能提升不多;而棧架構可以自由分配實際的寄存器,這樣的 可移植性比較高,也符合java的設計理念(一次編寫,處處運行)。
DVM為什麼基於寄存器:
優點:a.android手機製造商的處理器絕大部分都是基於寄存器架構的。
          b.棧架構中有更多的指令指派和訪問記憶體,這些比較耗時。所有相對來認為dvm的執行 效率更高一些。
          c.DVM就是為android運行而設計的,無需考慮其他平台的通用。 2.2.jvm啟動並執行是位元組碼檔案,而dvm運行自己定義的dex檔案格式
JVM編譯過程 java->class->jar
DVM編譯過程java->class->dex。此過程又DX工具將所有class檔案編譯成一個dex檔案,並會將多個class檔案進行重構,好處主要有:減少了整體檔案的尺寸,因為不同class檔案中有重複的常量;提高運行速度。所有的class檔案都產生在同一個檔案之中,尋找速度變快。圖從java檔案產生dex檔案過程  dvm和jvm區別簡單來說就是?

區別一:dvm執行的是.dex格式檔案  jvm執行的是.class檔案   android程式編譯完之後生產.class檔案,然後,dex工具會把.class檔案處理成.dex檔案,然後把資源檔和.dex檔案等打包成.apk檔案。apk就是android package的意思。 jvm執行的是.class檔案。

區別二:dvm是基於寄存器的虛擬機器  而jvm執行是基於虛擬棧的虛擬機器。寄存器存取速度比棧快的多,dvm可以根據硬體實現最大的最佳化,比較適合行動裝置。

區別三:.class檔案存在很多的冗餘資訊,dex工具會去除冗餘資訊,並把所有的.class檔案整合到.dex檔案中。減少了I/O操作,提高了類的尋找速度

      3.Dalvik設計規則3.1每一個app都運行在自己的DVM執行個體中與應用隔離。
3.2啟動一個app進程,一個DVM也就誕生了,該app下的代碼在DVM執行個體下解釋運行
3.3有幾個app進程就有幾個dvm執行個體。
3.4dvm對對象生命週期(組件生命週期理解)、堆棧、線程、異常以及記憶體回收進行管理。
3.5不支援j2se和j2me的api,也就不支援awt和swing(現在用的也非常少)     4.和ART的比較 在dalvik中,app每一次運行都要通過即時編譯器轉化成機器碼,這要多了一個編譯過程,會降低運行速度。而ART則是在安裝時,直接將位元組碼編譯成本機機器碼,實現了真正的本地應用,在以後的運行中不需要每次都翻譯。這樣速度更快,但是所佔用的儲存空間越大。(5.0新特性)詳情查看http://baike.baidu.com/link?url=NkaPr153-tUb1Qvdg21OSeIAUTS0cs8IonQntGeH-RJ7LDP-q7UfjoNpvBmI6AboL7WN3Pf6_UU40F-sAx_S1q   Android DVM簡介
          Dalvik Virtual Machine 是Android平台的基礎。 

           Dalvik和標準Java虛擬機器(JVM)之間的首要差別之一,就是Dalvik基於寄存器,而JVM基於棧。選擇基於寄存器的方式是因為它對提前最佳化(ahead-of-time optimization)提供了更好的支援,而這對類似於行動電話這樣的受限環境是頗有裨益的。另一份針對基於寄存器虛擬機器和基於棧虛擬機器更深入的比較分析指出,基於寄存器的虛擬機器對於更大的程式來說,在它們編譯的時候,花費的時間更短。


        Dalvik和Java之間的另外一大區別就是運行環境——Dalvik經過最佳化,允許在有限的記憶體中同時運行多個虛擬機器的執行個體,並且每一個 Dalvik應用作為一個獨立的Linux進程執行。獨立的進程可以防止在虛擬機器崩潰的時候所有程式都被關閉。


      Android平台架構圖: 



      : 

      應用程式套件組合括:首頁、聯絡管理、電話、瀏覽器、其他; 

      應用程式架構包括:Activity管理、表單管理、內容提供者、視圖系統、包管理、電話管理、資源管理、位置管理、通知管理。 

      庫包括:表面管理、媒體架構、SQLite、OpenGL(3D開發庫)、FreeType(字型引擎)、WebKit(網頁瀏覽器引擎核心庫)、SGL(2D圖形引擎庫)、SSL、libc、Android運行時(又包括核心庫和Dalvik虛擬機器)。

      Linux核心包括:顯示驅動、照相機驅動、記憶體驅動、Binder(IPC)驅動、鍵盤驅動、Wi-Fi驅動、音頻驅動、電源管理。 

      作為Java開發人員,最關係的可能是Android運行庫(Android Runtime),它包括兩部分:核心庫和Dalvik虛擬機器: 

      1.Android包括一組核心庫(core libraries),他提供了 Java 程式設計語言的核心庫中大多數可用功能。 


      2.每個 Android 應用程式運行在自己的進程上,有自己的 Dalvik 虛擬機器執行個體。 Dalvik這樣是為了使一個裝置可以有效地運行多個虛擬機器。 Dalvik VM 以被最佳化佔用最小記憶體的Dalvik Executable (.dex)格式執行檔案。VM 是基於寄存器的,並通過一個 Java 語言編譯器的編譯來運行,而這個Java編譯器已經被內建的"dx"工具轉成.dex 格式(DVM依賴LInux核心)。


      3.Dalvik MicrosoftVM 依賴 Linux 核心獲得準系統,如線程處理和底層記憶體管理。 


    Android亦包含常見移動平台的關鍵效能,它已擁有一個良好的堆棧,包括藍芽、EDGE, 3G和WiFi。在UI方面,支援OpenGL ES提供3D和類似於iPhone的介面管理(surface management)。

java jvm和android DVM區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.