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

Среда выполнения Android (ART) — это управляемая среда выполнения, используемая приложениями и некоторыми системными службами на Android. ART и его предшественник Dalvik изначально создавались специально для проекта Android. ART в качестве среды выполнения выполняет формат исполняемого файла Dalvik (DEX) и спецификацию байт-кода 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_FOR_ALLOC чрезвычайно редкими в типичных случаях использования.

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

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

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

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

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

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

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

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

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

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 Open Source Project . Включите adb bugreport и ссылку на приложение в магазине Google Play, если оно доступно. В противном случае, если возможно, прикрепите APK, воспроизводящий проблему.