R8 は Android で Kotlin Coroutin... ノート

R8 は Android で Kotlin Coroutines を 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アプリのパフォーマンス最適化を継続しており、この最適化はその取り組みの重要な一部です。