Intereting Posts
Получение файлов cookie с веб-сайта с указанием пути и срока действия Плагин доступа CallLog в кордове не работает Создание копии представления? Соединение с adb отключено, и произошла серьезная ошибка. Необходимо перезапустить adb и Eclipse. Убедитесь, что adb правильно расположен Задача Gradle zipAlign не работает? Как сгенерировать подписанный и неподписанный APK с использованием градиента? Как подражать Nexus 4? Как показать PopupWindow всегда над кнопкой (просмотр)? Android RecyclerView Endless Scroll добавляет пункт throwing Exception для Android Support Library 24.2.1 Соответствие шаблону регулярных выражений в Android AS не может найти BottomSheetBehavior_Params, _behavior_peekHeight и _behavior_hideable Нажмите на пункт «Ящик навигации», появится новый список в навигационном ящике Импорт нескольких проектов и отдельных проектов в Android Studio Android: Рекурсивная копия с помощью adb push ExpandableListView с фиксированным groupView при прокрутке

JIT против компиляции AOT

Этот вопрос связан с системой Android. Dalvik VM использует концепцию JIT , это означает, что при первом запуске приложения Dalvik VM компилирует его и загружает в ОЗУ, пока он может оставаться там. Я понимаю эту концепцию. Но новая виртуальная машина под названием ART , использует метод AOT . АРТ компилирует приложение после его установки (или когда вы его устанавливаете?). Что это значит ? Приложения, составленные с помощью ART, такие же, как уже скомпилированные приложения (например, C-приложения), но выполняются в отдельных процессах, отделенных от остальной ОС? Может ли кто-то объяснить мне эти понятия более основательно. Мне нужно сделать презентацию, и это упоминается там, но я не понимаю эту концепцию, и я не хочу выглядеть глупым, если кто-то спрашивает меня об этом 🙂 Извините за плохой английский, было бы неплохо, если бы кто-нибудь Может немного изменить вопрос.

Я не полностью знаю, как Dalvik JIT на Android работает на практике, потому что у JIT есть несколько вариантов, как можно работать.

Первый вариант заключается в том, что JIT переводит весь байт-код в инструкции CPU при запуске приложения. Эта опция провела некоторое время до запуска приложений и после этого приложение может работать как native. Проблема в том, что переведенное приложение должно храниться в памяти во время запуска, что не очень хорошо.

Второй вариант заключается в том, что JIT работает как реальный Just-In-Time, что означает, что перевести блок кода, когда он начнется. Целевое приложение не транслируется при запуске, но только основная функция транслируется при запуске, а затем транслируется во время запуска, когда используется определенный блок кода (функция и т. Д.). Эта опция потребляет меньше памяти, но приложение работает намного медленнее во время запуска.

Согласно информации, которую я нашел, Android использует первый вариант. Приложение переводится на запуск, после чего оно выполняется «почти» изначально. И это «почти» делает основное различие между JIT и AOT.

Когда вы собираетесь запустить какое-либо приложение, JIT имеет ограниченное время для компиляции всего байт-кода в инструкции процессора, чтобы сделать «задержку» «приемлемой» долгой. Это означает, что он может выполнять только базовые оптимизации. Однако, когда вы устанавливаете какое-либо приложение, у вас обычно больше времени, чтобы тратить время, и вы делаете это только один раз – не на каждом запуске. Это означает, что AOT-компилятор имеет гораздо больше времени для поиска трюков, как оптимизировать это приложение. Результирующий код должен быть более «эффективным». Второе преимущество заключается в том, что скомпилированное приложение хранится в кеше, и только часть его может быть загружена в память при запуске. Это означает, что ОС не сохранила весь код в памяти и может сохранить его. И это основные различия.

И последняя часть вашего вопроса – ART на Android выполнит компиляцию при установке (после сохранения apk в / data / app /). Однако, если вы протрите этот кеш или переключитесь с Dalvik на ART, он скомпилирует все установленное приложение при первой загрузке, что может занять 10 или даже больше минут.

И извините за мой плохой английский тоже, я чешский 🙂