Davilk虛擬機作為Android平台的一部分.Google公司花了大量時間思考針對低功耗手持設備的優化設計。在智能手機出現之前,與桌面設備相比,手持設備在內存和速度方面落后8-10年。它們的計算能力也有限。結果,手機的性能需求變得很嚴格,要求手機設計人員優化所有因素。如果查看Android中的包列表,你將會看到它們的功能全面而豐富。
這些問題使Google公司在許多方面重新審視標准JVM實現。(Dan Bomstein(一位Stanford university 的教授)對Google公司的這個JVM實現作出了重要貢獻,他編寫了Dalvik VM,Dalvik是冰島一個小鎮的名稱。)首先.Dalvik VM獲取生成的Java類文件,將它們組合為一個或多個Dalvik可執行文件(.dex)。它重用多個類文件中的重復信息,與未壓縮的傳統.jar文件相比,有效地將空間需求減少了一半。如圖所示:
其次,Google公司在Dalvik VM中對垃圾收集進行了調優,但它在早期版本中選擇了刪除java經典的JIT(Just-In-Time,即時)編譯器。后來,Android 2.3添加了JIT.報告稱這可在各種場所提供快2到5倍的原始性能,將通用應用程序的性能提升l0%-20%.android 4.4以后引入的art虛擬機,這是一種新的機制,以后有時間在說。
最后,Dalvik VM使用了一種不同的匯編代碼生成方法,它使用寄存器而不是棧作為主要的數據存儲單元。GOogle公司希望這樣能將指令減少到30%。應當指出,采用Dalvik VM的一個結果是,Android中最終的可執行程序代碼不是基於Java字節碼,而是基於.dex文件。這意味着無法直接執行Java字節碼,必須首先得到Java類文件,然后將它們轉換為可鏈接的.dex文件。如圖所示:
這種對性能的狂熱追求還擴展到了Android SDK的其他部分。例如:
Android SDK大量使用XML來定義相應布局。然而,所有XML數據必須編譯為二進制文件,然后才能將這些文件存儲在設備上。Android提供了一些專門的機制來處理XML數據。
當然,android由於虛擬機的限制,有了相應的性能瓶頸,因此在android 4.4時候引入art虛擬機。下節,我們聊一聊art虛擬機。