2026 年 1 月 29 日,Kotlin 2.3.20-Beta2 发布。这次更新虽然还是 Beta 版,但带来了一个实验性但意义重大的变化:Kotlin/Native 的垃圾回收器(GC)默认启用了并发标记(Concurrent Marking)。
一、什么是并发标记 GC?
先说问题
在之前的默认配置 PMCS(Parallel Mark Concurrent Sweep)中:
GC 标记阶段必须暂停所有应用线程。
这意味着什么?当 GC 需要标记堆中的对象时,你的应用会停下来等待。
对于延迟敏感的应用——尤其是 UI 应用,这种"暂停"直接表现为卡顿、掉帧。
再说解决
CMS(Concurrent Mark and Sweep)的核心改进:
标记阶段可以与应用线程并发执行!
简单来说:GC 标记对象时,你的应用可以继续运行。
二、实际效果
官方已经用 Compose Multiplatform UI 应用做了基准测试:
CMS 显著改善了性能表现。
这意味着:
- 更短的 GC 暂停时间
- 更流畅的用户界面
- 更好的响应速度
三、如何使用
默认启用(Beta 版)
在 Kotlin 2.3.20-Beta1 和 Beta2 中,CMS 已经是默认配置。
你什么都不用改,直接升级版本就能体验:
kotlin("multiplatform") version "2.3.20-Beta2"
如果遇到问题
CMS 仍然是实验性功能,在某些情况下可能导致:
- 运行时崩溃
- 吞吐量下降
- 内存占用增加
如果遇到回归问题,可以手动切回 PMCS:
# gradle.properties
kotlin.native.useNativeCms=false
四、开发者的谨慎
Kotlin 团队采取的是渐进式发布策略:
| 版本 | GC 模式 |
|---|---|
| 2.3.20-Beta1/2 | CMS(默认,收集反馈) |
| 2.3.20-RC | 回滚到 PMCS |
| 2.3.20 正式版 | 待定 |
为什么这么做?
官方说得很直白:
需要收集更多反馈,确保发现所有问题。
这是负责任的态度——先在 Beta 版让广大开发者帮忙"压力测试",收集足够数据后再决定正式版是否默认启用。
五、其他更新亮点
1. C/Obj-C 互操作新模式
如果你在 Kotlin Multiplatform 中使用 C 或 Objective-C 库,可以尝试新的互操作模式:
kotlin {
targets.withType<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget>().configureEach {
compilations.configureEach {
cinterops.configureEach {
extraOpts += listOf("-Xccall-mode", "direct")
}
}
}
}
注意:新模式仍是实验性,不要用此模式发布库。
2. JPA 插件增强
kotlin.plugin.jpa 现在自动应用 all-open 插件的 JPA 预设:
plugins {
kotlin("plugin.jpa") version "2.3.20-Beta2"
}
JPA 实体类自动变成 open,无需手动配置 all-open。
支持的注解:
javax.persistence.Entityjavax.persistence.Embeddablejavax.persistence.MappedSuperclassjakarta.persistence.Entityjakarta.persistence.Embeddablejakarta.persistence.MappedSuperclass
3. Maven 配置简化
新建 Kotlin Maven 项目时,不再需要手动:
- 创建源码目录
- 添加
kotlin-stdlib依赖
<configuration>
<sourceRootsAutoDetection>true</sourceRootsAutoDetection>
</configuration>
4. Gradle 9.3.0 兼容
支持 Gradle 7.6.3 到 9.3.0。
Kotlin/JVM 编译默认使用 Build tools API (BTA)。
5. 标准库新增 API
Map.Entry.copy() 扩展函数,用于创建 Map.Entry 的不可变副本:
@OptIn(ExperimentalStdlibApi::class)
val mutableMap = mutableMapOf("key" to "value")
val entry = mutableMap.entries.first()
val copy = entry.copy() // 创建不可变副本
六、写到最后
Kotlin 2.3 的 GC 改进,对 Kotlin/Native 生态——尤其是 Compose Multiplatform 开发者来说,是一个值得期待的进步。
虽然目前还是 Beta 实验,但:
- 如果你开发 UI 应用
- 你在意用户体验
- 你受够了 GC 卡顿
不妨现在就试试 Beta 版,把你的反馈提交给官方。
你的每一个问题报告,都是在帮 Kotlin 变得更好。
参考资料
升级提醒:IDE 支持 Kotlin 2.3.20-Beta2 的插件已捆绑在最新版 IntelliJ IDEA 和 Android Studio 中,只需修改 build.gradle.kts 中的版本号即可。