• 沒有找到結果。

心得:

N/A
N/A
Protected

Academic year: 2022

Share "心得: "

Copied!
5
0
0

加載中.... (立即查看全文)

全文

(1)

LSKA Survey: Dalvik Virtual Machine R98921075 唐立宇 R98921044 陳則諭 Motivation:

Google 在 2007 年提出了 Android 架構做為手機上的軟體開發平台,其中很 特別的一件事是在應用軟體開發中採用 Java 語法,但是在 Android Runtime 中,

卻不是用 Java Virtual Machine,而是自己開發了一個 Dalvik Virtual Machine。這 讓我們很好奇究竟 Dalvik Virtual Machine 和 Java Virtual Machine 有什麼不一樣。

所以這次 Survey 就對 Dalvik Virtual Machine 進行了解。

Android 系統架構:

其中藍色部分的程式都是以 Java 編寫,執行時須經過 Dalvik Virtual Machine。由 此可見 Dalvik Virtual Machine 在 android 架構中佔了極重要的部分。

Dalvik 的名稱:

Dalvik 的名稱來自於冰島的一個小鎮,只是 Dalvik Virtual Machine 的 Project Manager 剛好看到這個名稱,沒有什麼特殊意義。

(2)

Dalvik Virtual Machine 的一些性質:

Type safe, Reference safe:

完全禁止將 class 的 type 強制 cast 成其他 type,除非其他 type 為該 class 的 superclass。禁止將 integer 等做為 pointer 來存取記憶體。"Well-typed programs never go wrong."

支援 Garbage Collection:

使用簡單的”Mark & Sweep”機制來做 garbage collection,但為配合 memory sharing 的設計,mark bit 是單獨的放在一塊記憶體區塊中,與 一般 mark bit 與 class 放在一起的設計不同。

Run on modern OS:

支援 multi process, multi thread 運作。

Big class library:

Google 希望任何人都能輕鬆使用 android 開發程式,對於 Dalvik Virtual Machine 而言,為了要能直接取代 Java Virtual Machine 直譯目前廣泛使 用的 Java .class,提供至少與 Java 相同(可能更多)的 Library 是必需的。

.dex 的 byte code 格式:

Dalvik Virtual Machine 有自己的 byte code 格式,稱做 Dalvik executable,

附檔名為.dex,特色是一個單位為 2 byte (16 bits),大約有 220 個 opcode。

Register based, not stack based

與一般 Virtual machine 採用 stack based 不同,Dalvik Virtual Machine 是 register based,目的是減少將變數 push 進 stack 的流程,減少執行同樣 功能使用的 CPU cycle 和 code length。

Dalvik Virtual Machine 最大特色-memory 與 CPU efficiency :

在手機上 memory size 與 CPU 的 computing power 都是極為有限,越大 的 memory size 或越強大的 CPU 不僅提高硬體成本,更重要的是當它們運作 時消耗的電量也會越高,降低了手機的使用時間,或必須因此使用更大容量 的電池。Dalvik Virtual Machine 就是針對手機上此一特性來做設計,讓 Dalvik Virtual Machine 可以比 Java Virtual Machine 可以更符合手機平台的需求。

根據 Google 的資料,android 平台最小記憶體需求 64MB,其中啟動 OS 大約 會用掉 24MB,Service 及 Library 大約會再用掉 20MB,也就是說其他

Application Process 大約只有 20MB 可用,所以 Dalvik Virtual Machine 希望可 以節省 application footprint,並希望不同的 VM Process 可以 share memory。

(3)

根據以上的比較表,使用 Dalvik Virtual Machine 的.dex 相較於 java 大約 可以節省一半的 memory usage.

Dalvik Virtual Machine 會有較少的 memory usage 的主要改變特色有:

Shared Constant pool

在 Java 的 class file 中,有很大的一部分都是在儲存大量且與其他 class 重複的 constant string,例如 method reference 及 return type,用途不同但目 的相似的 class 可能有許多重覆相同的 string,Dalvik Virtual Machine 使用 shared constant pool,使用 pointer 指向相同的字串,在同一個.dex 檔中,每 個字串只會出現一次,一個字串被不同 node 指到代表不同的意思。並且將 長字串拆成多個部分,若只有一小部分不同,則只會在不同部分指向不同字 串,相同部分會指向相同的字串,節省長字串的儲存空間。

(4)

在.dex 檔案中,每個長度不同的字串會存在 data 區域中。再用固定寬 度的”string_ids” pointer 去指向真正儲存的位置,各種不同用途的 ids pointer 再指向 string_ids。如果要讀取某個 method id,則會由 method_ids pointer 指向該字串的 string_ids pointer,再由 string_ids pointer 指向真正儲存的位置,

透過 multilevel 且 indirection 存取字串,讓程式的 static size 可以盡量縮小。

Shared memory

將 memory page 分成四種:shared clean、shared dirty、private clean、

private dirty。若有多個 Process 使用同一塊記憶體,則是屬於 shared,反之 則是 private。若是內容有經過更改過的部分是 dirty,反之是 clean。若是 private clean 的部分,當需要 swap space 時,可直接清除,若有需要則再次 讀進即可。shared dirty 則採取 copy-on-write 的方式,讓不同的 process 各自 保存自己的資料。Library 共通的 library 會是 shared clean,讓多個 process 使用,節省使用的記憶體空間。為了配合此一設計,garbage collection 的 mark bit 是統一集中在記憶體中某處,而非較普遍的與 object 放在一起,以 避免僅因為 mark bit 的改變,就使得整塊的 clean memory 變成 dirty。

Register Machine

如同先前所提到的,Dalvik Virtual Machine 採用 register base,而不是使 用 stack base,因為節省將變數 push 進 stack 的 instruction,不但減少 code length,而且也減少 CPU cycle 數。

No JIT compile, Only Interpreter

Dalvik 與 Java 不同的另外一個地方是它並沒有設計 JIT compiler,而是只 有 interpreter。手機上的程式大多是以互動為主,所以反應時間只需要能符 合操作需要及可。另一個考量是即使某項功能操作略為緩慢,但 JIT 會使得 原本緩慢程式在 JIT compile 後突然變快,時快時慢,反而讓使用者難以預料 反應時間來操作,更不方便。

(5)

心得:

Google 為了 android 付出了不少心力,不使用 Java Virtual Machine 而是另外 設計了 Dalvik Virtual Machine。由以上的介紹來說,儘管 Java 已經為了小型裝置 設計了 Java ME 這個平台,專為手機特別設計的 Dalvik Virtual Machine 的確還是 比 Java Virtual Machine 更適合手機這個環境。

專為手機設計的平台更適合手機這並不令人意外,當中查到了許多在技術以 外的因素,Google 忝為當今網路世界的最大品牌,如果在 Android 上採用 Java Virtual Machine,則 android 平台若需改版更新等許多因素,就深受買下 Sun 的 Oracle 的影響,甚至還會有專利技術權的爭議。因此網路上普遍的評論就是認為 Google 使用 Dalvik Virtual Machine 取代 Java Virtual Machine 的目的就是在於避免 技術爭議。當然由以上的資料,可以看出 Dalvik Virtual Machine 與 Java Virtual Machine 還是有不少不一樣,但無可否認在智慧財產權訴訟如此頻繁的資訊領域,

能夠避免技術所有權爭議,並取得平台發展的主導權,的確是非常重要的一件事 情。尤其是 Google 一向就是宣稱若是沒有他們滿意的工具,就會自己打造一個(尤 其是常常是利用主導開放原始碼計畫來增強他們自己的產品,像是 chromium project)。有人說 Android 上的開發平台其實已經不是(原本的)Java,而只是語法 跟 Java 一模一樣的語言。因為使用 Android 提供的 API 與 Library,跑在 Dalvik Virtual Machine 上,與 Java 語言真的只剩下是語法是一樣的。

無論背後的原因是如何,對程式設計人員、手機製造商、使用者來說,Android 與 Dalvik Virtual Machine 提供了一個更自由(相較於 apple iphone),更方便(相較 於 Java ME)的手機程式開發平台。背後還有自從成立到現在幾乎都是無往不利,

技術領先的 Google 支持,可以期待他未來的發展。

(題外話:但是 Smart phone 還是很貴,3G 通信費也不便宜,儘管有著 Locality Based Service, Augmented Reality 等等方便或是驚人的服務,對於金錢有限的學生來說,

這些服務的價錢一樣驚人,要享受 LBS,現在還是去書店買本地圖帶了走比較實 在)

參考文獻

相關文件

[r]

怎麼了 妳累了 說好的 幸福呢 我懂了 不說了 愛淡了 夢遠了 開心與不開心一一細數著 妳再不捨 那些愛過的感覺都太深刻 我都還記得. 妳不等了 說好的 幸福呢 我錯了 淚乾了

怎麼會哭 我怎麼會哭 我以為我能撐得住 能承受失去你的 孤獨. 怎麼會哭 我怎麼會哭

微信扫一扫

[r]

Android 開發上,為了減少程式設計師在 UI 版面設計所花費的時間,Android 提供了不同的 layout 元件來輔助程式設計師進行開發,下列為 Android 開發上常用的 layout

這同時也在一定程度上降低了 Java 程式的執行效率。但在 J2SE1.4.2 釋出後,Java 的執行速度有了大幅提 升。與傳統型態不同昇陽公司在推出 Java 時就將其作為開放的技術。全球數以萬計的

男人本來想做壞事 但是出了東門後 又不 願作 就毫不眷戀地回家去(寫他內心的衝突) 但進了家門