Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Android Runtime (ART) и Dalvik

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

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

Особенности ART

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

Компиляция с опережением времени (AOT)

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

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

Улучшенная сборка мусора

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

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

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

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