2009年6月11日 星期四

讀後感: Android Dalvik VM vs. Java VM

在拜讀jserv大的此文章 Android Dalvik VM vs. Java VM 後,有一些感想

其實此專案點出一個重點,就是DalvikVM 的bytecode execution效能普遍沒有現有的CDC/CLDC VM來的好,
一方面是DalvikVM沒有JIT,一方面是發展的時間不夠久

當初DalvikVM不做JIT的原因是手持式裝置記憶體過小,太多的native code反而會造成記憶體管理上的負荷。
但是他們也認知到未來若Android porting至小筆電,JIT的需求會越來越明顯,因此DalvikVM JIT的確有放在DalvikVM的roadmap中

但反觀此專案的本質,他們讓Android app能夠透過此另類的middleware在任何的JavaVM上執行
我相信到後來他們一定會遇到一個困境:他們吸引不到大多數的programmer使用CLDC API撰寫Android app。

DalvikVM在整個Android system framework只是一個小小的部份,其他強大的系統特性與API才是重點,
  1. 所有的DalvikVM process皆由Zygote統籌管理並與DalvikVM合作,可以平行執行而不互相干擾
  2. 提供IBinder與AIDL方便撰寫IPC
  3. dex load進來後內容可以由各個process共享,而不像JavaVM每一個process有各自的class loader
  4. user可以一直開process而不需要提醒自己關閉,Low Memory Killer會主導與管理需要關閉的process,user永遠不會收到OOM (OutOfMemoryError)
  5. app可以在簡訊或來電時接到通知
  6. app可以控制手機上的 GPS, 發送簡訊, 甚至決定撥號與聯絡人操控介面
  7. app之間可以透過Intent 互通有無
Android能夠迅速在市場上竄紅,就是其系統化的思考,以及與AP層的緊密連結
而這個部份JavaVM永遠不可能做到,因為JavaVM永遠只是user space process。

他們終究不可能把Android整個系統與API、或者類似的功能放到手機上,
而DalvikVM會實作JIT是可預見的未來。

一點淺顯拙見,供大家參考。

2009年6月9日 星期二

Android : Low Memory Killer

Android DalvikVM不會丟出OOM的密技:就是直接砍掉你 Low Memory Killer

user在手機上使用時,會開很多的process,當然每一段時間只會使用一個主process,所以其實LMK會砍掉的是不常被使用或是背景的process,所以不會影響到user experience

比起一般JVM會於heap不夠時立刻丟出OOM,其實LMK的方式對使用者的影響反而比較小,因為使用者再也不用"關閉程式",系統會使用LMK來砍掉(也可以說幫忙關閉)舊的或不常使用的process

Android是一個重視user experience的OS,這就是為什麼Android比J2ME更適合用於消費性電子的手機上