Подтвердить что ты не робот

Разница между dexopt и dex2oat?

Google перемещается от Dalvik до ART (время выполнения Android).

Я пытался понять, как это улучшит производительность.

Лучшее объяснение, которое я нашел, - это изображение ниже:

Dalvik and ART

Один из основных компонентов, который изменился, составляет от dexopt до dex2oat.

Так как у меня нет большой идеи об этом, может ли кто-нибудь объяснить разницу и как это будет улучшать производительность?

4b9b3361

Ответ 1

dexopt выполняет некоторые оптимизации в файле dex. Он выполняет такие функции, как замена команды виртуального вызова с оптимизированной версией, которая включает в себя индекс vtable вызываемого метода, так что ему не нужно выполнять поиск метода во время выполнения.

Результатом dexopt является файл odex (оптимизированный dex). Это очень похоже на исходный файл dex, за исключением того, что он использует некоторые оптимизированные коды операций, например оптимизированную виртуальную инструкцию invoke.

dex2oat принимает файл dex и скомпилирует его. Результатом является, по сути, файл эльфа, который затем выполняется изначально. Поэтому вместо того, чтобы байт-код, который интерпретируется виртуальной машиной, теперь имеет собственный код, который может выполняться изначально процессором. Это называется компиляцией AOT (впереди).

Оба инструмента обычно запускаются во время установки на устройстве.

Еще один фактор, который следует учитывать, заключается в том, что dalvik использовал компилятор JIT (точно в момент времени) - это значит, что он также смог скомпилировать байт-код для собственного кода. Главное отличие состоит в том, что АРТ компилирует все заблаговременно, тогда как dalvik только скомпилировал подмножество байт-кода, используя эвристику, чтобы обнаружить наиболее часто исполняемый код и скомпилировался во время выполнения.