Kotlin 语言参考文档 中文版 Help

Kotlin Daemon

Kotlin Daemon 是一个后台进程, 通过它, 构建系统可以让编译器及其运行环境保持就绪状态以执行编译, 以此提高构建速度. 这种方案避免了对每次编译都启动一个新的 Java Virtual Machine (JVM) 实例, 并重新初始化编译器, 从而减少增量编译或频繁的小规模变更时的构建时间.

一些构建系统有自己的 Daemon 来降低启动开销, 例如 Gradle DaemonMaven Daemon. 使用 Kotlin Daemon 代替它们, 可以降低启动开销, 同时还能将构建系统进程与编译器完全隔离. 在系统设置可能在运行期发生变化的动态环境中, 这样的隔离非常有用.

尽管 Kotlin Daemon 没有直接面向用户的接口, 但你可以通过构建系统或 构建工具 API 使用它.

Kotlin Daemon 配置

可以通过以下方式为 Gradle 或 Maven 配置 Kotlin Daemon 的某些设置.

内存管理

Kotlin Daemon 是一个独立的进程, 有它自己的内存空间, 与客户端隔离. 默认情况下, Kotlin Daemon 会尝试继承启动它的 JVM 进程的堆内存大小 (-Xmx).

要配置特定的内存限制, 例如 -Xmx-XX:MaxMetaspaceSize, 请使用以下属性:

kotlin.daemon.jvmargs=-Xmx1500m

详情请参见 kotlin.daemon.jvmargs 属性.

<kotlin.compiler.daemon.jvmArgs>-Xmx1500m</kotlin.compiler.daemon.jvmArgs>

生命周期

Kotlin Daemon 有两种常用的生命周期策略:

  • Attached Daemon: 在客户端进程关闭后不久, 或 Daemon 长时间未使用后关闭 Daemon. 适用于客户端长期运行的情况.

  • Detached Daemon: 让 Daemon 保持更长时间的运行, 等待潜在的后续请求. 适用于客户端短暂运行的情况.

要配置生命周期策略, 可以使用以下选项:

选项

描述

默认值

autoshutdownIdleSeconds

在客户端仍连接的情况下, 上次编译结束后 Daemon 应保持存活的时长.

2 小时

autoshutdownUnusedSeconds

新启动的 Daemon 在未被使用时, 等待第 1 个客户端连接的时长.

1 分钟

shutdownDelayMilliseconds

所有客户端断开连接后, Daemon 等待关闭的时长.

1 秒

要配置 Attached Daemon 的生命周期策略, 请将 autoshutdownIdleSeconds 设置为较大的值, 将 shutdownDelayMilliseconds 设置为较小的值.

gradle.properties 文件中添加以下内容:

org.gradle.jvmargs=-Dkotlin.daemon.jvm.options=autoshutdownIdleSeconds=7200,shutdownDelayMilliseconds=1000

使用以下命令:

mvn package -Dkotlin.daemon.options=autoshutdownIdleSeconds=7200,shutdownDelayMilliseconds=1000

要配置 Detached Daemon 的生命周期策略, 请将 shutdownDelayMilliseconds 设置为较大的值.

gradle.properties 文件中添加以下内容:

org.gradle.jvmargs=-Dkotlin.daemon.jvm.options=shutdownDelayMilliseconds=7200

pom.xml 文件中添加以下属性:

<kotlin.compiler.daemon.shutdownDelayMs>7200</kotlin.compiler.daemon.shutdownDelayMs>
2026/07/24