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.
