TGTGInsighttelegram intelligenceLIVE / telegram public index
← Android Broadcast
Android Broadcast avatar

TGINSIGHT POST

Post #9937

@android_broadcast

Android Broadcast

Vues6,470Nombre de vues
Publié2 avr.02/04/2026 14:47
Contenu

Contenu du post

⚡️R8 наконец-то починил AtomicReferenceFieldUpdater в корутинах на Android Это история про баг, которому больше двух лет. В 2023 году в трекере kotlinx.coroutines появился issue: AtomicReferenceFieldUpdater, которым корутины управляют состоянием Job, на Android работает в 2–4 раза медленнее, чем обычный AtomicReference на операциях compareAndSet и lazySet. Корень проблемы в том, что корутины используют atomicfu, который на JVM компилируется в Atomic*FieldUpdater ради совместимости с KMP. На десктопном JDK это нормально, но ART на Android оптимизирует их хуже. Бенчмарк на Pixel 4a давал 135 нс против 50 нс — разница почти в 3 раза на compareAndSet. R8 в составе AGP 9.2 закрывает этот разрыв на уровне компилятора: он определяет, где Atomic*FieldUpdater можно заменить на Unsafe-вызовы, и генерирует одну инструкцию вместо цепочки. ART тоже получит аналогичную оптимизацию в JIT, но она имеет ограничения по версии платформы и хуже масштабируется по тестам автора. Для нас это значит: никаких изменений в коде, просто обновить AGP. Бесплатное ускорение каждого launch и cancel в приложении. На мой взгляд, абсолютно правильно решать проблему именно на стороне R8, а не правками всех библиотек. 🔗 Источник - X Andrei Shikov #kotlin#coroutines#performance