1. 程式人生 > >Android 虛擬機器 libdvm so 與 libart so

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和dexoptlibdvm是執行時翻譯;libart是在install的時候翻譯。3,這些實現的邏輯在zygote的建立有關。