1. 程式人生 > >對《深入理解Android虛擬機器》一書的知識點總結

對《深入理解Android虛擬機器》一書的知識點總結

1.Android虛擬機器(Dalvik)和java(VM)虛擬機器的區別:
(1)可執行檔案:
Android:執行的是.dex檔案
java:執行的是標準的位元組碼(Bytecode)
(2)所基於的記憶體:
Android:基於暫存器的虛擬機器(Register-based)
java:基於棧的虛擬機器(Stack-based)
注:
什麼是棧?
a.”棧“者,儲存貨物或供旅客住宿的地方,可引申為倉庫、中轉站,所以引入到計算機領域裡,就是指資料暫時儲存的地方,所以才有進棧、出棧的說法。

b.棧作為一種資料結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指標。

c.cpu只從系統給我們自己編寫的應用程式所規定的棧入口線性地讀取執行指令, 用一個形象的詞來形容它就是pipeline(管道線、流水線)。

d.在計算機系統中,棧則是一個具有以上屬性的動態記憶體區域。程式可以將資料壓入棧中,也可以將資料從棧頂彈出。在i386機器中,棧頂由稱為esp的暫存器進行定位。壓棧的操作使得棧頂的地址減小,彈出的操作使得棧頂的地址增大。
棧操作示意圖
e.棧在程式的執行中有著舉足輕重的作用。最重要的是棧儲存了一個函式呼叫時所需要的維護資訊,這常常稱之為堆疊幀或者活動記錄

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

b.暫存器是CPU內部用來存放資料的一些小型儲存區域,用來暫時存放參與運算的資料和運算結果。其實暫存器就是一種常用的時序邏輯電路,但這種時序邏輯電路只包含儲存電路。暫存器的儲存電路是由鎖存器或觸發器構成的,因為一個鎖存器或觸發器能儲存1位二進位制數,所以由N個鎖存器或觸發器可以構成N位暫存器。