Все методы dex2oat компилирует?
Я понимаю, что в последних версиях Android файлы Dex компилируются в файлы OAT на устройстве. Содержат ли файлы OAT скомпилированные версии всех методов в файле Dex, или некоторые методы остаются в виде байт-кода Dex и интерпретируются во время выполнения?
1 ответ
Dex2oat не компилирует все методы, если уровень параметров компиляции приложения невелик или если метод не считается горячим после запуска в течение некоторого времени.
Как мы знаем, dex2oat имеет множество параметров фильтрации компиляции: Verify, Quicken, space-profile, space, speed-profile, speed, все. От проверки до всего компиляция занимает все больше и больше времени, все больше и больше классов и методов компилируются в байт-код.
Вы можете использовать команду oatdump для проверки состояния компиляции методов в конкретном пакете (проверьте ключевое слово OatClassAllCompiled oatclasssomecomcompiled).
например Lcom/android/listviewtest/MainActivity$1; (смещение =0x000015c8) (type_idx=98) (проверено) (OatClassAllCompiled)
Кроме того, в Android dex2oat настроены свойства для разных сценариев:
[pm.dexopt.ab-ota]: [speed-profile]
[pm.dexopt.bg-dexopt]: [speed-profile]
[pm.dexopt.boot]: [verify]
[pm.dexopt.first-boot]: [quicken]
[pm.dexopt.inactive]: [verify]
[pm.dexopt.install]: [speed-profile]
[pm.dexopt.shared]: [speed]
Ссылки: https://source.android.com/devices/tech/dalvik/configure