Я пытаюсь выяснить конкретные различия в средах выполнения Dalvik и ART. Я понимаю, что ART больше не использует виртуальную машину Dalvik, однако одной из первых вещей, которые я заметил после установки предварительной версии Android L, было то, что процесс zygote все еще работает. Если бы они действительно избавились от виртуальной машины Dalvik, разве это не сделало бы процесс zygote бесполезным? Кроме того, после проверки исходного кода, выпущенного через AOSP, большая часть Dalvik все еще остается.
Zygote на самом деле не связан с Dalvik, это просто процесс инициализации. Zygote — это метод, который Android использует для запуска приложений. Вместо того, чтобы запускать каждый новый процесс с нуля, заново загружая всю систему и инфраструктуру Android каждый раз, когда вы хотите запустить приложение, он выполняет этот процесс один раз, а затем останавливается на этом этапе, прежде чем Zygote сделает что-либо конкретное для приложения. . Затем, когда вы хотите запустить приложение, процесс Zygote разветвляется, и дочерний процесс продолжает работу с того места, где остановился, загружая само приложение в виртуальную машину.
Хотя этот метод изначально был разработан для Dalvik, нет никаких причин, по которым ART не должен вести себя точно так же. Ему не нужно JIT-компилировать приложения во время их работы, но он по-прежнему должен загружать множество независимых от приложений вещей Java (т. е. всю инфраструктуру Android), поэтому имеет смысл использовать ту же вилку, когда загруженный метод для запуска новых процессов.
Вполне естественно, что в таком большом проекте будут другие остатки от Dalvik, которые все еще будут полезны в пост-Dalvik-мире, поэтому вас не должно удивлять наличие другого кода, который изначально был написан как часть или для работайте с Dalvik, который все еще доступен для использования в ART.
b̶i̶t̶c̶o̶d̶e̶
-> bytecode
. D̶a̶l̶v̶i̶k̶V̶M̶
-> ART's Interpreter
. DalvikVM
не используется. Но его интерпретатор и JIT объединены в ART
.Dalvik bytecode
(оракул берет байт-код Java) и преобразует его. APK содержит только байт-код dalvik, и при dex2oat
его компиляции фильтры решают, что делать с AOT (и во время выполнения профили решают, что нужно JIT).
РоссК
Иззи