Ответ 1
Я не совсем знаю, как Dalvik JIT на Android работает на практике, потому что JIT имеет несколько вариантов, как можно работать.
Первый вариант заключается в том, что JIT переводит весь байт-код в инструкции CPU при запуске приложения. Эта опция провела некоторое время до запуска приложений и после этого приложение может работать как native. Проблема в том, что переведенное приложение должно храниться в памяти во время запуска, что не очень хорошо.
Второй вариант заключается в том, что JIT работает как реальный Just-In-Time, что означает, что перевести блок кода, когда он начнет запускаться. При запуске всего приложения не транслируется, но только основная функция транслируется при запуске, а затем транслируется во время запуска, когда используется определенный блок кода (функция и т.д.). Эта опция потребляет меньше памяти, но приложение работает намного медленнее во время работы.
Согласно информации, которую я нашел, Android использует первый вариант. Приложение переводится на запуск, после чего оно выполняется "почти" изначально. И это "почти" делает основное различие между JIT и AOT.
Когда вы собираетесь запускать какое-либо приложение, JIT имеет ограниченное время для компиляции всего байт-кода в инструкции процессора, чтобы сделать "задержку" "приемлемой" долгой. Это означает, что он может выполнять только базовые оптимизации. Однако, когда вы устанавливаете какое-то приложение, у вас обычно больше времени, чтобы тратить время, и вы делаете это только один раз, а не при каждом запуске. Это означает, что компилятор AOT имеет гораздо больше времени для поиска трюков, как оптимизировать это приложение. Результирующий код должен быть более "эффективным". Второе преимущество заключается в том, что скомпилированное приложение хранится в кеше, и только часть его может быть загружена в память при запуске. Это означает, что ОС не сохранила весь код в памяти и может сохранить его. И это основные различия.
И последняя часть вашего вопроса - ART на Android выполнит компиляцию при установке (после сохранения apk в /data/app/ ). Однако, если вы протрите этот кеш или переключитесь с Dalvik на ART, он скомпилирует все установленное приложение при первой загрузке, что может занять 10 или даже больше минут.
И извините за мой плохой английский тоже, я чешский: -)