Как R8 ускорил корутины Kotlin... Заметка

Как R8 ускорил корутины Kotlin на Android в 2 раза

Команда Android работала над оптимизацией производительности корутин в приложениях Android, особенно в тех, которые используют Kotlin. Библиотека kotlinx.atomicfu, используемая kotlinx.coroutines, оказалась узким местом из-за использования AtomicReferenceFieldUpdater, который имеет значительные накладные расходы из-за проверок рефлексии. Для решения этой проблемы компилятор R8 был обновлен для оптимизации большинства вызовов AtomicFieldUpdater до вариантов Unsafe, что привело к улучшению производительности в 2-4 раза. Эта оптимизация доступна в AGP 9.2.0 и более поздних версиях и оказывает значительное влияние на производительность Jetpack Compose, который широко использует корутины. Оптимизация работает путем замены вызовов AtomicFieldUpdater на вызовы Unsafe, что устраняет необходимость в проверках рефлексии. Компилятор R8 может статически оптимизировать эти вызовы, что приводит к значительному улучшению производительности. Оптимизация была протестирована и проверена с помощью бенчмарков, которые показывают 2-кратное улучшение производительности корутин. Кроме того, команда ART работает над нативной реализацией аналогичных оптимизаций на уровне виртуальной машины, что обеспечит дальнейшее повышение производительности. Оптимизация доступна по умолчанию при использовании AGP 9.2.0 или более поздних версий, а также может использоваться напрямую с R8 9.2.0. Улучшение производительности значительно, причем некоторые бенчмарки показывают 2-кратное улучшение производительности корутин. В целом, эта оптимизация является важным шагом в повышении производительности приложений Android, использующих корутины и Kotlin. Оптимизация была успешно протестирована и внедрена, и теперь она доступна для использования в приложениях Android. Команда Android продолжает работать над оптимизацией производительности приложений Android, и эта оптимизация является важной частью этих усилий.