11.4 Kotlin 守护进程

原文链接: https://kotlinlang.org/docs/kotlin-daemon.html

11.4 Kotlin 守护进程

Kotlin 守护进程是一个后台进程,构建系统可以用它来改善构建时间:让编译器和它的环境保持随时可编译的状态。这种方式避免了为每次编译启动新的 Java 虚拟机(JVM)实例并重新初始化编译器,从而缩短增量构建或频繁小改动时的构建时间。

有些构建系统有自己的守护进程来帮助减少启动开销,例如 Gradle 守护进程和 Maven 守护进程。改用 Kotlin 守护进程既能减少启动开销,又能把构建系统进程与编译器完全隔离。在系统设置可能在运行时发生变化的动态环境中,这种隔离很有用。

虽然 Kotlin 守护进程没有直接面向用户的界面,但你可以通过构建系统或构建工具 API来使用它。

Kotlin 守护进程配置

在 Gradle 或 Maven 中,有一些方式可以配置 Kotlin 守护进程的部分设置。

内存管理

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

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

Gradle

1
kotlin.daemon.jvmargs=-Xmx1500m

更多信息请参阅 kotlin.daemon.jvmargs 属性。

Maven

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

生命周期

Kotlin 守护进程有两种常见的生命周期策略:

  • 附加式守护进程:在客户端进程关闭后不久,或在守护进程一段时间未被使用后将其关闭。适用于客户端长时间运行的情况。
  • 分离式守护进程:让守护进程存活更久,以等待可能的后续请求。适用于客户端生命周期较短的情况。

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

| 选项 | 说明 | 默认值 |

| autoshutdownIdleSeconds | 当客户端仍然连接时,守护进程在最后一次编译之后应继续存活多久。 | 2 小时 | | autoshutdownUnusedSeconds | 新启动的守护进程在未被使用的情况下,等待第一个客户端多久后才关闭。 | 1 分钟 | | shutdownDelayMilliseconds | 所有客户端断开连接后,守护进程等待多久才关闭。 | 1 秒 |

要配置附加式守护进程的生命周期策略,请把 autoshutdownIdleSeconds 设为较高的值,把 shutdownDelayMilliseconds 设为较低的值。

Gradle

把以下内容添加到你的 gradle.properties 文件中:

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

Maven

使用以下命令:

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

要配置分离式守护进程的生命周期策略,请把 shutdownDelayMilliseconds 设为较高的值。

Gradle

把以下内容添加到你的 gradle.properties 文件中:

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

Maven

把以下属性添加到你的 pom.xml 文件中:

1
<kotlin.compiler.daemon.shutdownDelayMs>7200</kotlin.compiler.daemon.shutdownDelayMs>