jollen.org

Jollen 的 Blog
Jollen's email: jollen # jollen.org
more:  Jollen's Training

Dalvik VM 與 JVM 差異比較:Zygote 與 Class Preload

.作者:jollen/
.日期:January 4, 2011 10:34 AM


Android 2.3 框架源碼釋出後,開始有必要對 Dalvik VM 做深入的研究。建議可以由 Dalvik VM 與 Java VM 的差異起步。Dalvik VM 與 Java VM 雖然字面上都是「Java 虛擬機」,但內部設計並不完全相同,存在一些差異。最中最重要的差異,就是 Dalvik VM 加入了 Zygote 的設計。

在過去許多的演講場合,不斷提到 Zygote 的觀念,在 [Jollen 的 Android 觀念解析, #1: Zygote Mode] 日記裡也曾簡要提及。Zygote 負責幾項重要的工作:

1. Listening Socket (Forking child process)
2. Preload Resource
3. Preload Class
4. Start System Server
5. Enter Zygote Fork Mode

與 JVM 最大的不同是,Dalvik VM 透過 Zygote 進行「Class Preloading」。意思是,把絕大部份的「Java class file」載入記憶體。Java class file 被打包成 *.jar 檔,Java class file 就是 Java library,提供 Android 應用程式與框架所需的 API。Zygote 所載入的 class file,幾乎包含所有的 API,當然,大部份自已都用不到,因此稱之為「preload」,也就是「預載」。透過 preload,讓 Android 應用程式在載入時,不需要重覆「class loading」的動作,除了加快應用程式啟動速度外,也達到許多效果。

Class preloading 是 Dalvik VM 最重要的特色之一,也是與 JVM 不同之處。Class preloading 是在 Android 裝置開機時進行,可能產生的不良效應之一就是「開機變慢」,不過,已經有一些方法可以解決這個問題。在了解 Dalvik VM 與 Zygote 後,便能開始深入 Dalvik VM 的 heap 原理。

Tags:

純手工打造說明:技術專欄文章為 Jollen 原創,內容皆為人工撰寫,無 AI 生成。轉載請註明出處與作者,並全文引用。轉載時請在文章開頭或結尾明顯處註明「本文出處:https://www.jollen.org,已取得原作者同意並授權使用。」
訂閱電子報:不定期 Jollen's Blog 精選文章隨 Moko365 電子報寄送;請透過 Moko365 電子報訂閱(可隨時取消)。

Copyright(c) 2001–2011 www.jollen.org. All rights reserved.
Last update: 2026-07-22