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

Google двигался из Dalvik to ART(Среда Выполнения Android).

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

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

Dalvik and ART

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

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

1 ответов


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

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

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

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

еще один фактор, который следует учитывать, - это то, что dalvik использовал JIT (just-in-time) компилятор - это означает, что он также смог скомпилировать байт-код в собственный код. Основное отличие, однако, заключается в том, что ART компилирует все заранее, тогда как dalvik скомпилировал только подмножество байт-кода, используя эвристику для обнаружения кода, который выполнялся чаще всего, и он компилировался во время выполнения.