R8이 Kotlin Coroutines를 Android에서 2배 더 빠르게 만든 방법
Android 팀은 Android 앱, 특히 Kotlin을 사용하는 앱에서 코루틴 성능을 최적화하기 위해 노력해 왔습니다. kotlinx.coroutines에서 사용하는 kotlinx.atomicfu 라이브러리는 리플렉션 검사로 인한 상당한 오버헤드를 가진 AtomicReferenceFieldUpdater를 사용하기 때문에 병목 현상이 발생하는 것으로 나타났습니다. 이 문제를 해결하기 위해 R8 컴파일러가 업데이트되어 대부분의 AtomicFieldUpdater 호출을 Unsafe 변형으로 최적화하여 2배에서 4배의 성능 향상을 가져왔습니다. 이 최적화는 AGP 9.2.0 이상 버전에서 사용할 수 있으며, 코루틴을 광범위하게 사용하는 Jetpack Compose의 성능에 상당한 영향을 미칩니다. 이 최적화는 AtomicFieldUpdater 호출을 Unsafe 호출로 대체하여 리플렉션 검사의 필요성을 제거함으로써 작동합니다. R8 컴파일러는 이러한 호출을 정적으로 최적화하여 상당한 성능 향상을 가져올 수 있습니다. 이 최적화는 벤치마크를 통해 테스트 및 검증되었으며, 코루틴 성능에서 2배의 향상을 보여줍니다. 또한 ART 팀은 VM 수준에서 유사한 최적화를 네이티브로 구현하기 위해 노력하고 있으며, 이는 추가적인 성능 향상을 제공할 것입니다. 이 최적화는 AGP 9.2.0 이상을 사용할 때 기본적으로 사용할 수 있으며, R8 9.2.0과 직접 함께 사용할 수도 있습니다. 일부 벤치마크에서 코루틴 성능이 2배 향상되는 것을 보여주는 등 성능 향상이 상당합니다. 전반적으로 이 최적화는 코루틴과 Kotlin을 사용하는 Android 앱의 성능을 향상시키는 중요한 단계입니다. 이 최적화는 성공적으로 테스트 및 구현되었으며, 이제 Android 앱에서 사용할 수 있습니다. Android 팀은 Android 앱의 성능을 최적화하기 위해 계속 노력하고 있으며, 이 최적화는 이러한 노력의 중요한 부분입니다.