Johan Luttu

Kotlins dolda kostnader och möjligheter kontra Javas för Android Runtime

Sammanfattning

I mitten av år 2019 blev Kotlin Googles föredragna programmeringspråk för Android-utveckling istället för Java. Därför är det i entiteters intresse att migrera från Java till Kotlin för deras Android-projekt för att få så mycket stöd som möjligt av Google. Denna studien har evaluerat vad en Java (version 8) till Kotlin (version 1.3.50)-migration skulle innebära för en Android-applikation när det kommer till körtidsprestanda. En mängd med sex stycken språkfunktioner var analyserad, först genom en kvalitativ byte-kodanalys, och sedan genom att genomföra mikro-benchmarks.

Syftet med den kvalitativa byte-kodanalysen var att upptäcka Kotlins dolda kostnader eller möjligehter som inte var synliga i källkoden. Resultaten för analysen visade att byte-koden som Kotlin producerade, jämfört med Java, kan leda till extra arbetsbördor för skräpinsamlaren och ett ökat metodantal för Android-applikationers DEX-filer. Det var också observerat att Kotlin sytematiskt utför så kallat boxing och unboxing för kortlivade objekt ifall primitiva värden skickas som argument till, eller returnerade som, ett lambda-uttryck för ett exempel som involverade att ett lambda-uttryck skickades som argument till en funktion av högre ordning.

Syftet med mikro-benchmarks var att att mäta de dolda kostnadernas eller möjligheternas potentiella påverkan, men också för att se ifall det går att lita på att byte-kodoptimeringsverktyg mildrar de potentiella kostnaderna. Resultaten visade, för de flesta fallen, att även ifall det existerade ett sätt att manuellt optimera bort en dold kostnad som Kotlin kunde ha, resulterade inte den manuella optimeringen i bättre prestanda än i fallet när icke-optimerad kod hade blivit optimerad av byte-kodoptimeringsverktyg. Övergripande, för de optimerade fallen, var det knappt någon skillnad i exekveringshastigheten av de implementerade språkfunktionerna i båda språken.