Готовый перевод Asynchronous Android Programming. Second Edition. / Асинхронное программирование на Android. Второе издание.: Программный стек Android

Программный стек Android

Программный стек Android (библиотеки C и фреймворки Java) организованный рабочими средами Android (Dalvik VM, и с недавнего времени ART) созданными на основе ядра Linux, для обеспечения высого интерактивного пользовательского опыта на хорошо зарекомендовавшей себя группой технологий.

В каждой новой версии ОС разработчику предоставляется чётко определённый программный интерфейс для создания приложений вокруг новых функций и стандартов, внесённых в релиз.

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

Рабочая среда Dalvik

Рабочая среда Dalvik VM (DVM) создана Дэном Борштейном, является первой средой для платформы, и представляет собой основанную на регистрах виртуальную машину, которая была создана для выполнения Java кода в ограниченной среде с ограниченной вычислительной мощьностью, оперативной памятью, и электроэнергией.

Разработчики Dalvik утверждают, что DVM, в среднем на 30% эффективнее стандартной Java VM (Oracle).

По словам Борнштейна, он (Dalvik) требует на 30% меньше инструкций и на 35% меньше кодирующих ячеек.

Очевидно, Google пошла на многое, чтобы выжать производительность из каждого мобильного устройства до последней капли, чтобы помочь разработчикам создавать отзывчивые приложения.

Виртуальная машина, которая запускает скомпилированный и преобразованный Java код в формате dex через инструмент dx, запускает на процессе Linux с своими собственными пространством и файловыми дескрипторами.

Она также управляет своей группой потоков.

В более продвинутых архитектурах, Android приложения могут запускать службу (сервис) в отдельном процессе и связываться через IPC механизм, но большую часть времени они работают на одном автономном процессе.

Файлы dex и ресурсы приложений запаковываются в пакет прикладных программ Android (П.П. Android application package (APK)) с помощью AAPT и устанавливаются через Google Play на устройства конечных пользователей.

[Модель магазина приложений стала чрезвычайно популярна на мобильных платформах с момента запуска Apple iPhone в 2007 году.]

Начиная с Android 2.2, DVM поставляется с поддержкой компиляции Just-In-Time (JIT) на основе трассировки, которая активно оптимизируется каждый раз, когда приложение запускает короткие сегменты часто используемого байт-кода, называемого трассировкой.

Сгенерированный машинный код обеспечивает значительное улучшение производительности, в выполняемом приложении, и времени, затрачиваемом на некоторые ресурсоёмкие задачи, что соответственно уменьшает потребляемую мощность батареи.

Рабочая среда ART

Рабочая среда ART -- это новая версия DVM и нововведения для улучшения производительности среды и потребления памяти.

Новая рабочая среда была добавлена в Android 4.4 KitKat как экспериментальная, затем в Android 5.0 Lollipop стала основной средой.

Новая рабочая среда использует досрочную(ahead-of-time, AOT) компиляцию, обеспечивая новую оптимизацию приложений при запуске и их выполнении.

AOT, в отличие от DVM JIT (Just in Time), компилирует dex-файлы во время инсталяции, с помощью инструмента устройства dex2oat.

Скомпилированный код, сгенерированный инструментом dex2oat, генерирует системозависимый код для целевого устройства и убирает задержку, созданную JIT компиляцией во время выполнения каждого предложения.

Также AOT компилятор уменьшает число циклов процессора, используемых приложением, т.к. он удаляет время, затрачиваемое JIT компилятором, преобразовывая код в машинный код, и использует меньше энергии для запуска приложений.

Один из недостатков AOT компиляции -- большой объём занимаемой памяти, используемой DVM, по сравнению с JIT.

С новой рабочей средой, кое-какие улучшения были также введены в распределение памяти и Garbage Collection (GC), что привело к более отзывчивому UI и лучшему опыту от приложений.

Разделение памяти и Zygote

Обычно, платформа запускает по экземпляру DVM/ART для каждого приложения, но куда большая оптимизация вызвана тем, как новый экземпляр DVM создаётся и управляется.

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

Zygote запускает виртуальную машину, предзагружает основные библиотеки и инициализирует различные общие структуры.

После он ожидает инструкция, прослушивая сокет.

Когда новое приложение запущено, Zygote получает команду на создание виртуальной машины для запуска этого приложения.

Открывает предварительно "разогретый" процесс ВМ и создаёт новый дочерний процесс, который отделяет определённое кол-во частей от памяти с родительским процессом, используя метод "копирование при записи" (copy-on-write, COW).

Техника COW, доступная на большинстве Unix систем, выделяет только новую память для дочернего процесса, когда процесс пытается выбрать клонированную память из родительского прцесса.

Эта техника имеет фантастические преимущества, вот их список:

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

• Второе, память, в которой находятся все эти основные библиотеки и общие структуры, используется Zygote совместно с остальными приложениями, в результате сохраняется много памяти, когда пользователь запускает множество приложений.

(П.П. Интересно, а англоговорящим режет ли слух слово, если они его повторяют в каждом предложение по два-три раза?)

http://tl.rulate.ru/book/12504/272196

Обсуждение главы:

Еще никто не написал комментариев...
Чтобы оставлять комментарии Войдите или Зарегистрируйтесь