Среда выполнения Android (ART) и Dalvik

Среда выполнения Android (ART) — это управляемая среда выполнения, используемая приложениями и некоторыми системными службами Android. ART и его предшественник Dalvik изначально создавались специально для проекта Android. ART в качестве среды выполнения выполняет формат исполняемого файла Dalvik и спецификацию байт-кода Dex.

ART и Dalvik — совместимые среды выполнения с байт-кодом Dex, поэтому приложения, разработанные для Dalvik, должны работать при работе с ART. Однако некоторые методы, которые работают на Dalvik, не работают на ART. Сведения о наиболее важных проблемах см. в разделе Проверка поведения приложения в среде выполнения Android (ART) .

Особенности искусства

Вот некоторые из основных функций, реализованных в ART.

Предварительная компиляция (AOT)

ART представляет компиляцию с опережением времени (AOT), которая может повысить производительность приложения. ART также имеет более жесткую проверку времени установки, чем Dalvik.

Во время установки ART компилирует приложения с помощью встроенного в устройство инструмента dex2oat . Эта утилита принимает файлы DEX в качестве входных данных и создает исполняемый файл скомпилированного приложения для целевого устройства. Утилита должна иметь возможность без труда скомпилировать все допустимые файлы DEX. Однако некоторые инструменты постобработки создают недопустимые файлы, которые могут быть допущены Dalvik, но не могут быть скомпилированы ART. Дополнительные сведения см. в разделе Решение проблем со сборкой мусора .

Улучшенный сбор мусора

Сборка мусора (GC) очень требовательна к ресурсам, что может снизить производительность приложения, что приведет к прерывистому отображению, плохому отклику пользовательского интерфейса и другим проблемам. ART улучшает сборку мусора несколькими способами:

  • В основном параллельный дизайн с одной паузой GC
  • Параллельное копирование для уменьшения фонового использования памяти и фрагментации
  • Длина паузы GC не зависит от размера кучи.
  • Сборщик с более низким общим временем GC для особого случая очистки недавно выделенных недолговечных объектов.
  • Улучшена эргономика сборки мусора, что делает одновременную сборку мусора более своевременной, что делает события GC_FOR_ALLOC чрезвычайно редкими в типичных случаях использования.

Улучшения разработки и отладки

ART предлагает ряд функций для улучшения разработки и отладки приложений.

Поддержка профилировщика выборки

Исторически разработчики использовали инструмент Traceview (предназначенный для отслеживания выполнения приложений) в качестве профилировщика. Хотя Traceview дает полезную информацию, его результаты на Dalvik были искажены из-за накладных расходов на вызов метода, и использование инструмента заметно влияет на производительность во время выполнения.

В ART добавлена ​​поддержка специального профилировщика выборки, не имеющего этих ограничений. Это дает более точное представление о выполнении приложения без значительного замедления. Поддержка выборки была добавлена ​​в Traceview для Dalvik в выпуске KitKat.

Поддержка дополнительных функций отладки

ART поддерживает ряд новых параметров отладки, особенно в функциях, связанных с мониторингом и сборкой мусора. Например, вы можете:

  • Посмотрите, какие блокировки удерживаются в трассировке стека, а затем перейдите к потоку, удерживающему блокировку.
  • Спросите, сколько существует живых экземпляров данного класса, попросите показать экземпляры и посмотреть, какие ссылки поддерживают жизнь объекта.
  • Фильтровать события (например, точки останова) для конкретного экземпляра.
  • Посмотрите значение, возвращаемое методом при его выходе (используя события «выход метода»).
  • Установите точку наблюдения поля, чтобы приостановить выполнение программы при доступе к определенному полю и/или его изменении.

Улучшена детализация диагностики в исключениях и отчетах о сбоях.

ART предоставляет вам как можно больше контекста и деталей при возникновении исключений во время выполнения. ART предоставляет расширенные сведения об исключении для java.lang.ClassCastException , java.lang.ClassNotFoundException и java.lang.NullPointerException . (Более поздние версии Dalvik предоставили расширенную информацию об исключении для java.lang.ArrayIndexOutOfBoundsException и java.lang.ArrayStoreException , которые теперь включают размер массива и смещение за пределами границ, и ART также делает это.)

Например, java.lang.NullPointerException теперь показывает информацию о том, что приложение пыталось сделать с нулевым указателем, например поле, в которое приложение пыталось выполнить запись, или метод, который оно пыталось вызвать. Вот несколько типичных примеров:

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, который воспроизводит проблему.