reference to ;http://blog.csdn.net/koffuxu/article/details/44780351
Android libdvm.so 與 libart.so
系統升級到5.1之后,發現system/lib/下面沒有libdvm.so了,只剩下了libart.so。對於libart模式,從4.4就在Developer optins里面就可以手動選擇,到5.1算是轉正了。
1,什么是libdvm,libart。
Android KK里引入了ART虛擬機作為Dalvik虛擬機的替代,其主要目的是把Bytecode的翻譯優化從運行時提前到安裝時,以空間換時間,從而達到更流暢的用戶體驗。目前,KK中Dalvik仍是默認的虛擬機,但用戶可以在Developer Option中切換到ART虛擬機。坊間傳聞在下一版可能會轉正。Dalvik和ART的實現分別位於libdvm.so和libart.so這兩個庫。兩個可以同時build也可以只build一個,通過Makefile中的變量PRODUCT_RUNTIMES來控制(https://source.android.com/devices/tech/dalvik/art.html)。ART本質和Dalvik是一樣的,是將Java的Bytecode翻譯成Native code。它的主要的實現代碼在AOSP的art目錄下,另外在libcore/libart/下還有一部分Java層的實現。
2,dex翻譯成機器碼,在libdvm模式下和Libart模式下是有區別的
framework/native/cmds/installd/commands.c
涉及到的命令有dex2oat和dexopt
libdvm是運行時翻譯;
libart是在install的時候翻譯。
3,這些實現的邏輯在zygote的創建有關。
