| page.title=ART and Dalvik | |
| @jd:body | |
| <!-- | |
| Copyright 2014 The Android Open Source Project | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| --> | |
| <div id="qv-wrapper"> | |
| <div id="qv"> | |
| <h2 id="Contents">In this document</h2> | |
| <ol id="auto-toc"> | |
| </ol> | |
| </div> | |
| </div> | |
| <p>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.</p> | |
| <p>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 <a | |
| href="http://developer.android.com/guide/practices/verifying-apps-art.html">Verifying | |
| App Behavior on the Android Runtime (ART)</a>.</p> | |
| <h2 id="features">ART Features</h2> | |
| <p>Here are some of the major features implemented by ART.</p> | |
| <h3 id="AOT_compilation">Ahead-of-time (AOT) compilation</h3> | |
| <p>ART introduces ahead-of-time (AOT) compilation, which can improve app | |
| performance. ART also has tighter install-time verification than Dalvik.</p> | |
| <p>At install time, ART compiles apps using the on-device | |
| <strong>dex2oat</strong> tool. This utility accepts <a | |
| href="http://source.android.com/devices/tech/dalvik/dex-format.html">DEX</a> 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 <a | |
| href="http://developer.android.com/guide/practices/verifying-apps-art.html#GC_Migration">Addressing | |
| Garbage Collection Issues</a>.</p> | |
| <h3 id="Improved_GC">Improved garbage collection</h3> | |
| <p>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:</p> | |
| <ul> | |
| <li>One GC pause instead of two</li> | |
| <li>Parallelized processing during the remaining GC pause</li> | |
| <li>Collector with lower total GC time for the special case of cleaning up | |
| recently-allocated, short-lived objects</li> | |
| <li>Improved garbage collection ergonomics, making concurrent garbage | |
| collections more timely, which makes <a | |
| href="http://developer.android.com/tools/debugging/debugging-memory.html#LogMessages"><code>GC_FOR_ALLOC</code></a> | |
| events extremely rare in typical use cases</li> | |
| <li>Compacting GC to reduce background memory usage and fragmentation</li> | |
| </ul> | |
| <h3 id="Debugging_Imp">Development and debugging improvements</h3> | |
| <p>ART offers a number of features to improve app development and debugging.</p> | |
| <h4 id="Sampling_Profiler">Support for sampling profiler</h4> | |
| <p>Historically, developers have used the <a | |
| href=" http://developer.android.com/tools/help/traceview.html">Traceview</a> | |
| 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.</p> | |
| <p>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.</p> | |
| <h4 id="Debugging_Features">Support for more debugging features</h4> | |
| <p>ART supports a number of new debugging options, particularly in monitor- and | |
| garbage collection-related functionality. For example, you can:</p> | |
| <ul> | |
| <li>See what locks are held in stack traces, then jump to the thread that | |
| holds a lock.</li> | |
| <li>Ask how many live instances there are of a given class, ask to see the | |
| instances, and see what references are keeping an object live.</li> | |
| <li>Filter events (like breakpoint) for a specific instance.</li> | |
| <li>See the value returned by a method when it exits (using “method-exit” | |
| events).</li> | |
| <li>Set field watchpoint to suspend the execution of a program when a specific | |
| field is accessed and/or modified.</li> | |
| </ul> | |
| <h4 id="Crash_Reports">Improved diagnostic detail in exceptions and crash reports</h4> | |
| <p>ART gives you as much context and detail as possible when runtime exceptions | |
| occur. ART provides expanded exception detail for <code><a | |
| href="http://developer.android.com/reference/java/lang/ClassCastException.html">java.lang.ClassCastException</a></code>, | |
| <code><a | |
| href="http://developer.android.com/reference/java/lang/ClassNotFoundException.html">java.lang.ClassNotFoundException</a></code>, | |
| and <code><a | |
| href="http://developer.android.com/reference/java/lang/NullPointerException.html">java.lang.NullPointerException</a></code>. | |
| (Later versions of Dalvik provided expanded exception detail for <code><a | |
| href="http://developer.android.com/reference/java/lang/ArrayIndexOutOfBoundsException.html">java.lang.ArrayIndexOutOfBoundsException</a></code> | |
| and <code><a | |
| href="http://developer.android.com/reference/java/lang/ArrayStoreException.html">java.lang.ArrayStoreException</a></code>, | |
| which now include the size of the array and the out-of-bounds offset, and ART | |
| does this as well.)</p> | |
| <p>For example, <code><a | |
| href="http://developer.android.com/reference/java/lang/NullPointerException.html">java.lang.NullPointerException</a></code> | |
| 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:</p> | |
| <pre class="no-pretty-print"> | |
| java.lang.NullPointerException: Attempt to write to field 'int | |
| android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object | |
| reference</pre> | |
| <pre class="no-pretty-print"> | |
| java.lang.NullPointerException: Attempt to invoke virtual method | |
| 'java.lang.String java.lang.Object.toString()' on a null object reference</pre> | |
| <p>ART also provides improved context information in app native crash reports, | |
| by including both Java and native stack information. </p> | |
| <h2 id="Reporting_Problems">Reporting Problems</h2> | |
| <p>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 <a | |
| href="http://b.android.com">http://b.android.com</a>. | |
| Please include an <code>"adb bugreport"</code> 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.</p> |