天天看點

Android 中Dalvik(DVM)的詳解

Dalvik概述

Dalvik是Google公司自己設計用于Android平台的Java虛拟機。它可以支援已轉換為.dex(即Dalvik Executable)格式的Java應用程式的運作,.dex格式是專為Dalvik設計的一種壓縮格式,可以減少整體檔案尺寸,提高I/o操作的類查找速度是以适合記憶體和處理器速度有限的系統。

Dalvik虛拟機(DVM) 和Java 虛拟機(JVM)首要差别

Dalvik 基于寄存器,而JVM 基于棧。性能有很大的提升。基于寄存器的虛拟機對于更大的程式來說,在它們編譯的時候,花費的時間更短。

寄存器的概念

寄存器是中央處理器内的組成部分。寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、資料和位址。在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程式計數器(PC),在中央處理器的算術及邏輯部件中,包含的寄存器有累加器(ACC)。

棧的概念

棧是線程獨有的,儲存其運作狀态和局部自動變量的(是以多線程中局部變量都是互相獨立的,不同于類變量)。棧線上程開始的時候初始化(線程的Start方法,初始化配置設定棧),每個線程的棧互相獨立。每個函數都有自己的棧,棧被用來在函數之間傳遞參數。作業系統在切換線程的時候會自動的切換棧,就是切換SS/ESP寄存器。棧空間不需要在進階語言裡面顯式的配置設定和釋放。

DVM程序的設計規則

1)每個應用程式都運作在它自己的Linux空間。在需要執行該應用程式時Android将啟動該程序,當不再需要該應用程式,并且系統資源配置設定不夠時,則系統終止該程序。

2)每個應用程式都有自己的(DVM),是以任一應用程式的代碼與其他應用程式的代碼是互相隔離的。

3)預設情況下,每個應用程式都給配置設定一個唯一的Linux使用者ID。是以應用程式的檔案隻能對該應喲程式可見。

是以說麼個應用程式都擁有一個獨立的DVM,而每個DVM在Linux中又是一個程序,是以說DVM程序和Linux程序可以說是一個概念。

Android 應用程式的編譯

Android所有類都通過JAVA編譯器編譯,然後通過Android SDK的“dex檔案轉換工具”轉換為“dex”的位元組檔案,再由DVM載入執行。

本文轉自 最牛傻蛋 51CTO部落格,原文連結:http://blog.51cto.com/zuiniuwang/718347,如需轉載請自行聯系原作者