优化 Kotlin 性能可以从语言特性、JVM 层面、协程、内存、工具等多个角度入手。下面按实战优先级系统总结。
// 不推荐
list.map { it.toString() }.filter { it.isNotEmpty() }
// 推荐(减少中间集合)
list.asSequence()
.map { it.toString() }
.filter { it.isNotEmpty() }
.toList()
Sequence 处理大数据 + 多步操作List 即可(Sequence 有额外开销)inlineinline fun measure(block: () -> Unit) {
val start = System.nanoTime()
block()
println(System.nanoTime() - start)
}
✅ 适用:
❌ 避免:
value class(Kotlin 1.5+)@JvmInline
value class UserId(val id: Long)
✅ 避免包装类开销
✅ 常用于 DTO / ID / 配置
lateinit / !!!! 会抛异常lateinit 仅用于明确生命周期(如 Android)| 场景 | 推荐 |
|---|---|
| 只读 | listOf / setOf |
| 频繁添加 | ArrayList |
| 查找多 | HashSet / HashMap |
| 线程安全 | ConcurrentHashMap |
Dispatchers.IO // 文件/网络
Dispatchers.Default // CPU 计算
Dispatchers.Main // UI(Android)
❌ 不要在 Dispatchers.IO 做复杂计算
viewModelScope.launch { }
✅ 使用 viewModelScope / lifecycleScope
✅ CoroutineScope 要明确取消
(1..100).map {
async(Dispatchers.IO) { fetch(it) }
}.awaitAll()
⚠ 并发过多 → 线程竞争
✅ 使用 Semaphore 限流
@JvmStatic / @JvmFieldcompanion object {
@JvmStatic
fun create() = Foo()
}
✅ 减少调用开销(尤其 Java 互调)
Enum 过多Int 常量或 inline classdata class.copy() 会创建新对象Array 替代 List(极端性能)val arr = IntArray(1000)
✅ 高频计算、游戏、算法
@Benchmark
fun test() { ... }
✅ 不要靠“感觉”优化
❌ 过早优化
❌ 所有 lambda 都 inline
❌ Sequence 一定快
❌ 协程比线程快(只是更轻量)
如果你有具体场景(Android / 后端 / 算法 / 并发),我可以给针对性优化方案 + 示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。