为什么Gradle构建的Kotlin源代码暂停〜3秒“强制System.gc()”?
每个构建需要额外的3-4秒,在日志输出打印以下后立即暂停。
[LIFECYCLE] [org.jetbrains.kotlin.gradle.plugin.KotlinGradleBuildServices]强制System.gc()
为什么要“强迫”呢? 我如何避免这种情况,加快我的构建?
我研究过这个,这是Gradle的调试级别日志启用的结果(例如gradle --debug assemble
) 。
运行Gradle而不启用调试日志记录(例如, gradle --info assemble
) ,这不应该发生。
参考文献: libraries / tools / kotlin-gradle-plugin / src / main / kotlin / org / jetbrains / kotlin / gradle / plugin / KotlinGradleBuildServices.kt
Kotlin Gradle插件仅在启用调试日志记录时才会调用System.gc
(Gradle是使用-d
或--debug
命令行参数运行的)。 用户通常不会在启用调试日志记录的情况下运行Gradle,因为它非常嘈杂且速度很慢,所以强制执行GC是一个相对较小的问题。
从历史上看,当Gradle守护进程被启用时,这个行为被添加来测试内存泄漏。 这个想法是在构建之前和之后记录已用内存的差异,因此在测试中运行一些构建,并声明差异不超过阈值。
我认为应该避免调用System.gc
除非测试KotlinGradleIT#testKotlinOnlyDaemonMemory
正在运行,所以我在Kotlin KotlinGradleIT#testKotlinOnlyDaemonMemory
上创建了一个问题https://youtrack.jetbrains.com/issue/KT-17960