Androidin R8-kääntäjä tuplasi Kotlin Coroutines -suorituskyvyn

Google on julkaissut Android Gradle Plugin 9.2.0 -päivityksen, jonka R8-kääntäjä optimoi koodia niin, että rutiinien käynnistys ja peruutus toimivat jopa kaksi kertaa nopeammin.

Google on tuonut Android Gradle Plugin 9.2.0 (AGP) -päivityksessä ja R8-kääntäjässä merkittävän suorituskykyparannuksen Kotlin-kehittäjille. Kääntäjän tekemät uudet optimoinnit nopeuttavat Kotlin Coroutines -korutiinien käynnistämistä ja peruuttamista parhaimmillaan jopa kaksinkertaisesti.

Rajoitteena heijastustarkistukset

Kotlin-korutiineista ja niiden hyödyntämästä kotlinx.atomicfu-kirjastosta on muodostunut Android-sovelluskehityksen vakioasynkronointitapa. Esimerkiksi käyttöliittymäkirjasto Jetpack Compose tukeutuu vahvasti korutiineihin animaatioissa ja kosketustapahtumissa.

Suorituskykyanalyyseissä havaittiin kuitenkin, että suuri osa ajasta kului atomisten kenttien heijastustarkistuksiin (reflection checks). Jokainen korutiinin vaihe – kuten käynnistys, keskeytys tai peruutus – suorittaa vähintään yhden atomisen operaation. Java-puolen AtomicReferenceFieldUpdater joutui tekemään jatkuvasti turvallisuustarkistuksia varmistaakseen kenttien olemassaolon ja käytettävyyden suoritusaikana, mikä hidasti sovellusten toimintaa.

Kuinka R8-kääntäjä optimoi koodia

Androidin R8-kääntäjä pystyy nyt analysoimaan koodia kokonaisuutena ja tunnistamaan staattisesti selvät koodirakenteet. Optimointi tapahtuu kolmessa vaiheessa:

  • Instrumentointi: Kääntäjä luo kenttäosoittimet suoraa käsittelyä varten ilman turhia heijastustarkistuksia.
  • Korvaaminen: Ehdot täyttävät Atomic*FieldUpdater-kutsut korvataan suorilla ja huomattavasti nopeammilla Unsafe-rutiinikutsuilla.
  • Siivous: Tarpeettomaksi jääneet alkuperäiset kutsut ja turha koodi poistetaan sovelluspaketista.

Tämän ansiosta yksittäiset atomiset operaatiot toimivat testien mukaan 2–4 kertaa nopeammin. Esimerkiksi Jetpack Composen LaunchedEffect-kutsun korutiinien hallinnassa suorituskyky parani kaksinkertaiseksi.

Saatavuus kehittäjille

Kehittäjät saavat optimoinnin käyttöönsä päivittämällä projektinsa käyttämään Android Gradle Plugin -versiota 9.2.0 tai uudempaa R8-kääntäjää. Lisäksi Google kertoo, että Android Runtime (ART) tuo vastaavia optimointeja suoraan järjestelmätasolle tulevissa Android-versioissa.


Lähde: Android Developers Blog: How R8 made Kotlin Coroutines on Android 2x faster

Tekoälyavusteinen sisältö: Artikkeli on tuotettu tekoälyä hyödyntäen alkuperäislähteen pohjalta.