page.title=ART and Dalvik @jd:body
Android runtime (ART) is the managed runtime used by applications and some system services on Android. ART and its predecessor Dalvik were originally created specifically for the Android project. ART as the runtime executes the Dalvik Executable format and Dex bytecode specification.
ART and Dalvik are compatible runtimes running Dex bytecode, so apps developed for Dalvik should work when running with ART. However, some techniques that work on Dalvik do not work on ART. For information about the most important issues, see Verifying App Behavior on the Android Runtime (ART).
Here are some of the major features implemented by ART.
ART introduces ahead-of-time (AOT) compilation, which can improve app performance. ART also has tighter install-time verification than Dalvik.
At install time, ART compiles apps using the on-device dex2oat tool. This utility accepts DEX files as input and generates a compiled app executable for the target device. The utility should be able to compile all valid DEX files without difficulty. However, some post-processing tools produce invalid files that may be tolerated by Dalvik but cannot be compiled by ART. For more information, see Addressing Garbage Collection Issues.
Garbage collection (GC) can impair an app's performance, resulting in choppy display, poor UI responsiveness, and other problems. ART improves garbage collection in several ways:
GC_FOR_ALLOC
events extremely rare in typical use casesART offers a number of features to improve app development and debugging.
Historically, developers have used the Traceview tool (designed for tracing application execution) as a profiler. While Traceview gives useful information, its results on Dalvik have been skewed by the per-method-call overhead, and use of the tool noticeably affects run time performance.
ART adds support for a dedicated sampling profiler that does not have these limitations. This gives a more accurate view of app execution without significant slowdown. Sampling support was added to Traceview for Dalvik in the KitKat release.
ART supports a number of new debugging options, particularly in monitor- and garbage collection-related functionality. For example, you can:
ART gives you as much context and detail as possible when runtime exceptions
occur. ART provides expanded exception detail for java.lang.ClassCastException
,
java.lang.ClassNotFoundException
,
and java.lang.NullPointerException
.
(Later versions of Dalvik provided expanded exception detail for java.lang.ArrayIndexOutOfBoundsException
and java.lang.ArrayStoreException
,
which now include the size of the array and the out-of-bounds offset, and ART
does this as well.)
For example, java.lang.NullPointerException
now shows information about what the app was trying to do with the null pointer,
such as the field the app was trying to write to, or the method it was trying to
call. Here are some typical examples:
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 also provides improved context information in app native crash reports, by including both Java and native stack information.
If you run into any issues that aren’t due to app JNI issues, please report
them via the Android Open Source Project Issue Tracker at http://b.android.com.
Please include an "adb bugreport"
and link to the app in Google
Play store if available. Otherwise, if possible, attach an APK that reproduces
the issue. Please note that issues (including attachments) are publicly
visible.