Главная » Разработка для Android » СРЕДА ВРЕМЕНИ ИСПОЛНЕНИЯ ПРИЛОЖЕНИЯ ANDROID

0

 

Уникальная архитектура компонентов приложения Android обязана своим появлением отчасти тому, как в Android реализуется среда многопроцессного исполнения. Чтобы эта среда подходила для большого количества приложений, получаемых от многих производителей, и минимальным требованием для работы было доверие каждому из производителей, Android задействует несколько экземпляров виртуальной машины Dalvik, по одному для каждой задачи. В разделе «Жизненные циклы компонентов» далее и мы исследуем, как жизненные циклы компонентов позволяют Android оптимизировать способ сборки мусора в кучах (неупорядоченных массивах), используемых приложениями, и как обеспечивается выполнение стратегии восстановления памяти сразу в нескольких кучах.

В результате применения простого и надежного подхода к многопроцессной обработке в Android приходится эффективно делить память на несколько куч. Каждая куча должна быть относительно небольшой, чтобы в памяти одновременно могли умещаться несколько приложений. В каждой куче жизненный цикл компонентов позволяет компонентам, которые в данный момент не используются, – особенно неактивным компонентам пользовательского интерфейса – попадать в сборку мусора, когда в куче не хватает места, а позже вновь восстанавливаться при необходимости. Это, в свою очередь, стимулирует создание моделей данных, при котором центральная роль отводится базе данных. В таких моделях большинство данных по определению остается в неизменном состоянии в любое время. 

Виртуальная машина Dalvik

Применяемый в Android подход к многопроцессной обработке, при котором используется несколько процессов и несколько экземпляров виртуальной машины Dalvik, требует, чтобы каждый экземпляр виртуальной машины эффективно использовал дисковое пространство. Такая эффективность достигается частично с помощью жизненного цикла компонентов, который позволяет объектам сначала попадать в сборку мусора, а потом восстанавливаться, а частично с помощью самой виртуальной машины. Android использует виртуальную машину Dalvik для эксплуатации байт-кодовой системы dex, разработанной специально для Android. Байт-коды dex расходуют дисковое пространство приблизительно вдвое экономичнее, чем байт-коды Java, что приводит практически к двукратному снижению издержек памяти, затрачиваемых на работу классов Java в каждом процессе. В системах Android также применяется память, копирующая данные при записи, позволяющая совместно использовать динамическую память (heap memory) нескольким экземплярам одного и того же исполняемого файла Dalvik.

Зигота: ветвление нового процесса

Кроме того, было бы неэффективно, если бы каждый новый процесс загружал все необходимые базовые классы каждый раз, когда начинает работу новый экземпляр виртуальной машины. Поскольку Android помещает каждое приложение в отдельный процесс, он может пользоваться преимуществами базовых операций ветвления, поддерживаемых в операционной системе Linux, на которой основан Android. Таким образом, операционная система может порождать новые процессы из процесса-шаблона, который находится в оптимальном состоянии для запуска нового экземпляра виртуальной машины. Такой процесс-шаблон называется зигота (Zygote). Это экземпляр виртуальной машины Dalvik. В свою очередь, зигота

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

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии