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

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

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

Ответы (1)

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

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

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

Соответствует моему пониманию Zygote (будучи не-разработчиком). С «взгляда пользователя», вероятно, проще думать о Zygote как о «сервере приложений», действующем как «уровень абстракции» между приложениями и ОС (как это делает HAL для абстрактного оборудования): это не имеет значения. что там "ниже" (Dalvik или ART), интерфейс занимается "мелочей"?
Возможно, проще представить Zygote как сервер приложений, но это не совсем точное описание. Это просто часть ОС, которая запускает приложения, и она находится на стороне ОС на границе между приложением и ОС.
Спасибо, так что, по крайней мере, мое «базовое понимание» было правильным (я знаю, что «сервер приложений» не совсем точен, но его легче понять «обычному пользователю» — так что давайте сделаем его « службой приложений », чтобы продвинуть его дальше на стороне ОС ;)
То, что существует в исходном коде, не является «остатками», и мы не находимся в пост-Dalvik-эре! Бит-код Dalvik по-прежнему используется в качестве IR. Даже при самых высоких настройках не все скомпилировано с помощью AOT, и все еще есть некоторые вещи, которые необходимо интерпретировать. Итак, для них есть DalvikVM . Кроме того, устройства с небольшим объемом памяти будут использовать меньше AOT и больше интерпретации. Наконец, zygote инициализирует множество часто используемых классов, которые могут сэкономить место, поскольку они могут быть разделены между несколькими приложениями.
@Paschalis, вы путаете JIT-компиляцию с DalvikVM. Тот факт, что новые версии ART выполняют компиляцию JIT (точно в срок), не означает, что Dalvik все еще существует. Oracle Java также выполняет JIT-компиляцию, но это не означает, что она использует Dalvik.
отредактируйте мой предыдущий комментарий: b̶i̶t̶c̶o̶d̶e̶ -> bytecode. D̶a̶l̶v̶i̶k̶V̶M̶-> ART's Interpreter. DalvikVMне используется. Но его интерпретатор и JIT объединены в ART.
Раньше DalvikVM выполнял интерпретацию и JIT. ART выполняет AOT, JIT (>= Nougat) и интерпретацию. Компиляция (будь то JIT или AOT) берет Dalvik bytecode(оракул берет байт-код Java) и преобразует его. APK содержит только байт-код dalvik, и при dex2oatего компиляции фильтры решают, что делать с AOT (и во время выполнения профили решают, что нужно JIT).