Что процесс зиготы все еще делает в Android L?

13

Я пытаюсь выяснить конкретные различия во времени выполнения Dalvik и ART. Я понимаю, что ART больше не использует виртуальную машину Dalvik, однако одной из первых вещей, которые я заметил после установки предварительного просмотра Android L, было то, что процесс zygote все еще выполняется. Если они действительно избавятся от виртуальной машины Dalvik, не сделает ли это процесс зиготы бесполезным? Кроме того, после проверки исходного кода, выпущенного через AOSP, большая часть Dalvik все еще остается.

Джон
источник
1
Трудно понять, это релиз разработчика и FAR от завершения. На данный момент в него вшито много Kitkat / Jellybean, чтобы он работал и загружался.
RossC
Будучи по-прежнему « предварительным просмотром для разработчиков », спекулировать не имеет особого смысла (хотя я следую объяснениям Дэна). Это может быть, как описал Дэн, или это может быть «остаток», еще не «полностью устаревший». Когда он все еще работает на L-Release, это другое дело.
Иззи

Ответы:

14

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

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

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

Дэн Халм
источник
Соответствует моему пониманию Zygote (будучи не разработчиком). С точки зрения «пользователя», это, вероятно, упрощает восприятие Zygote как «сервера приложений», действующего как «уровень абстракции» между приложениями и ОС (как HAL делает для абстрагирования оборудования): это не имеет значения что такое «внизу» (Dalvik или ART), интерфейс имеет дело с «мелочами»?
Иззи
1
Это может облегчить восприятие Zygote как сервера приложений, но это не очень точное описание. Это только часть ОС, которая запускает приложения, и она находится на стороне ОС границы приложений и ОС.
Дэн Халм
Спасибо, так что, по крайней мере, мое «базовое понимание» было правильным (я знаю, что «сервер приложений» не точен, но легче понять «обычному пользователю» - поэтому давайте сделаем его « сервисом приложений », чтобы продвинуть его дальше) сторона ОС;)
Иззи
То, что существует в исходном коде, не является «остатками», и мы не в эпоху после Дальвика! Биткод Dalvik по-прежнему используется IR. Даже при самых высоких настройках не все AOT-компилируется, и есть некоторые вещи, которые нужно интерпретировать. Итак, для них есть DalvikVM . Кроме того, устройства с низким объемом памяти, будут использовать меньше AOT больше интерпретации. Наконец, zygote inits - куча часто используемых классов, которые могут сэкономить пространство, поскольку они могут быть разделены между несколькими приложениями.
Пасхалис
@Paschalis вы путаете JIT-компиляцию с DalvikVM. То, что новые версии компиляции ART do JIT (точно в срок) не означает, что Dalvik все еще рядом. Oracle Java также выполняет JIT-компиляцию, но это не значит, что она использует Dalvik
Martin