iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 5
0
自我挑戰組

Android API超初學!!系列 第 5

[Android API] [Day 5] Dalvik VM (3) - DVM/ART

今天是Dalvik VM三部曲最終章,複習完JVM是什麼之後,就要來看Dalvik VM(DVM)和JVM的差別在哪啦!

不過因為我還沒有深入了解DVM的技術,所以我先列舉一些網路上看到的差異點,等之後了解再來慢慢驗證吸收。
/images/emoticon/emoticon30.gif

  • DVM跟JVM最大差異為加入了Zygote的設計
  • DVM有class preloading,先把大部分class檔(Android APIs)打包成jar,預先載入記憶體(可能在開機時預載)。所以個別的Android APP在runtime時不需要再重複做class loading。
  • DVM的設計可讓一個APP使用分別的DVM instance,JVM是可讓多個APP使用同一個JVM。DVM分開的好處是可讓APP之間獨立,不會一個APP掛就影響到別的APP,但就會多出各個DVM之間的溝通effort。
  • DVM的執行速度較高,移植性較差
  • DVM在compile time優化程式碼,而不是在runtime
  • DVM bytecode和JVM bytecode不一樣
  • JVM是stack machine,DVM是register machine
  • DVM的副檔名.dex
  • Android 5.0之後,Android Runtime(ART)取代DVM (寫了這麼多結果已經被取代了Orz)

/images/emoticon/emoticon06.gif/images/emoticon/emoticon06.gif/images/emoticon/emoticon06.gif

既然DVM被取代了,再來紀錄一下ART和DVM的差異:

  • DVM採用Just-in-time(JIT)技術,ART採用Ahead-of-time(AOT)技術。AOT技術可在APP安裝時,就把bytecode譯成機器碼(好厲害的感覺!)
  • 承上,所以ART執行速度極快,可以省電。缺點就是安裝較久,且檔案較肥(因為事先譯好了啊)
  • ART和DVM都執行Dalvik bytecode,可向下相容
  • ART改善某些功能,例如garbage collection

參考網站:
http://www.jollen.org/blog/2011/01/dalvik-vm-jvm-zygote-class-preload.html
https://www.jianshu.com/p/e8781933658d
https://zh.wikipedia.org/wiki/Dalvik%E8%99%9A%E6%8B%9F%E6%9C%BA
https://zh.wikipedia.org/wiki/Android_Runtime
https://source.android.com/devices/tech/dalvik


上一篇
[Android API] [Day 4] Dalvik VM (2) - JVM
下一篇
[番外篇] [Day 6] iOS架構
系列文
Android API超初學!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
theneo
iT邦見習生 ‧ 2018-10-16 23:29:12

為了升級來留言一下XD

HANA APP iT邦新手 5 級 ‧ 2018-10-17 19:55:08 檢舉

我也跑去升級了XD

我要留言

立即登入留言