Android Runtime


Android Runtime (ART) 和 Dalvik

Android Runtime (ART) 是 Android 上的應用和部分系統服務使用的托管式運行時。ART 及其前身 Dalvik 最初是專為 Android 項目打造的。作為運行時的 ART 可執行 Dalvik 可執行文件並遵循 Dex 字節碼規范。

ART 和 Dalvik 是運行 Dex 字節碼的兼容運行時,因此針對 Dalvik 開發的應用也能在 ART 環境中運作。不過,Dalvik 采用的一些技術並不適用於 ART。有關最重要問題的信息,請參閱在 Android Runtime (ART) 上驗證應用行為

ART 功能

以下是 ART 實現的一些主要功能。

預先 (AOT) 編譯

ART 引入了預先編譯機制,可提高應用的性能。ART 還具有比 Dalvik 更嚴格的安裝時驗證。

在安裝時,ART 使用設備自帶的 dex2oat 工具來編譯應用。該實用工具接受 DEX 文件作為輸入,並為目標設備生成經過編譯的應用可執行文件。該工具應能夠順利編譯所有有效的 DEX 文件。但是,一些后處理工具會生成無效文件,Dalvik 可以接受這些文件,但 ART 無法編譯這些文件。有關詳情,請參閱解決垃圾回收問題

垃圾回收方面的優化

垃圾回收 (GC) 可能有損於應用性能,從而導致顯示不穩定、界面響應速度緩慢以及其他問題。ART 通過以下幾種方式對垃圾回收做了優化:

  • 只有一次(而非兩次)GC 暫停
  • 在 GC 保持暫停狀態期間並行處理
  • 在清理最近分配的短時對象這種特殊情況中,回收器的總 GC 時間更短
  • 優化了垃圾回收的工效,能夠更加及時地進行並行垃圾回收,這使得 GC_FOR_ALLOC 事件在典型用例中極為罕見
  • 壓縮 GC 以減少后台內存使用和碎片

開發和調試方面的優化

ART 提供了大量功能來優化應用開發和調試。

支持采樣分析器

一直以來,開發者都使用 Traceview 工具(用於跟蹤應用執行情況)作為分析器。雖然 Traceview 可提供有用的信息,但每次方法調用產生的開銷會導致 Dalvik 分析結果出現偏差,而且使用該工具明顯會影響運行時性能。

ART 添加了對沒有這些限制的專用采樣分析器的支持,因而可更准確地了解應用執行情況,而不會明顯減慢速度。KitKat 版本為 Dalvik 的 Traceview 添加了采樣支持。

支持更多調試功能

ART 支持許多新的調試選項,特別是與監控和垃圾回收相關的功能。例如,您可以:

  • 查看堆棧跟蹤中保留了哪些鎖,然后跳轉到持有鎖的線程。
  • 詢問指定類的當前活動的實例數、請求查看實例,以及查看使對象保持有效狀態的參考。
  • 過濾特定實例的事件(如斷點)。
  • 查看方法退出(使用“method-exit”事件)時返回的值。
  • 設置字段觀察點,以在訪問和/或修改特定字段時暫停程序執行。

優化了異常和崩潰報告中的診斷詳細信息

當發生運行時異常時,ART 會為您提供盡可能多的上下文和詳細信息。ART 會提供 java.lang.ClassCastExceptionjava.lang.ClassNotFoundExceptionjava.lang.NullPointerException 的更多異常詳細信息(較高版本的 Dalvik 會提供 java.lang. ArrayIndexOutOfBoundsExceptionjava.lang.ArrayStoreException 的更多異常詳細信息,這些信息現在包括數組大小和越界偏移量;ART 也提供這類信息)。

例如,java.lang.NullPointerException 現在會顯示有關應用嘗試處理 null 指針時所執行操作的信息,例如應用嘗試寫入的字段或嘗試調用的方法。一些典型示例如下:

java.lang.NullPointerException: Attempt to write to field 'int
android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object
reference
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference

ART 還通過納入 Java 和原生堆棧信息,在應用原生代碼崩潰報告中提供更實用的上下文信息。

報告問題

如果您遇到任何並非由應用 JNI 問題導致的問題,請通過 Android 開源項目問題跟蹤器報告這些問題。請在報告中加入 adb bugreport 信息和應用在 Google Play 商店中的鏈接(如果有)。否則,如果可能,請附加可重現該問題的 APK。

 

參考鏈接:

https://source.android.com/devices/architecture/modular-system/runtime

https://source.android.google.cn/devices/tech/dalvik/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM