站內搜尋

2011/2/23

Introduction to Android Dalvik - Dalvik 簡介

很久沒寫東西了,研究 Android 也大概一年的時間,
在網路上找到了不少資料,也自己研究了不少,
想想,也是到了該回饋這社會的時候了。

首先,我想先來討論一下在 Android 中 Dalvik 所辨演的角色。
有興趣的人也歡迎指教。

什麼是 Dalvik?
簡單說,就是在Android上面運行的 Java VM。

它使用 Harmony 的 一個子集做為 Core Class library,
再加上 Google 本身依據 Android 平台所做的調整。

所以在網路上爾偶會看到所謂的 “目前最先進的 Java VM" 之言,
我是持保留態度的。畢竟在 Dalvik 裡面,沒有看到什麼先進的 GC 技術,
沒記錯了話,JIT 也是 2.2 Froyo 之後才加進來的,
說實話這真的不是什麼所謂的最先進技術。

但它的確是為了 Android 而開發的,許多小地方還是有它的巧思在,
包括了如何更省memory、如何省下一些不必要的效能花費等。

Application 如何在 Android 上靠 Dalvik 運作
一個最基礎的觀念可能要先讓大家了解。
Android 在運行 Application 時,每個 Application 都是執行在一個獨立的 Process,而每個用來執行 Application 的 Process 都配有一個唯一的 Dalvik VM,利用它來運行上面的 Java program。

但假設每一個 Application 被叫起時,都要重新初始化、建立一個新的 VM,那各位手上的 Android 手機可能會慢到你想打爛它。

所以 Google 利用了 Linux 的 fork,來達成這一個重要的工作。

簡單的說,Android 在開機後,便會產生一個叫 Zygote 的 Process,而它會會架起一個單純的 Dalvik VM,當然就會將 Core Library 給載入。

Android 上(不包含 native process),所執行的 process 都是 fork Zygote 後,再重新載入對應的 package。

而 fork 在 Linux 中是一個相當快速的處理,也因此各位手上的 Android 在開啟程式的時後,
它的速度可以如此快。
另外則是對於記憶體方面,也可以達到節省的效果。
以 Core library 為例,fork 出來的 process 所指向的其實是同一份記憶體。
而當程式需要改變記憶體內的資料時,才會自動 branch 一塊屬於程式的記憶體空間使用。

下面附上有關 Dalvik 的一份介紹影片,是由 Google 所提供,
而且,最大的重點是! 他講中文!
有興趣的可以參考看看:

第一課,我想先講到這裡了,我的午休時間也結束了。
之後,應該會找一點時間來介紹 Dalvik 的 Memory allocation。
希望對大家有所幫助。

熱門文章