运行 Kotlin 脚本时设置 JVM 最大堆大小?

Dav*_*lis 6 kotlin

我正在使用以下命令运行 Kotlin 脚本:

kotlinc -script myscript.kts
Run Code Online (Sandbox Code Playgroud)

这会进行一些非常繁重的数据处理,并且很快就会遇到 GC/堆空间错误(例如java.lang.OutOfMemoryError: GC overhead limit exceededjava.lang.OutOfMemoryError: Java heap space取决于脚本处理的内容)。

有没有办法在运行 Kotlin 脚本时增加 JVM 堆大小?尝试使用:

kotlinc -Xmx8g -script myscript.kts
Run Code Online (Sandbox Code Playgroud)

给出警告:

warning: flag is not supported by this version of the compiler: -Xmx8g
Run Code Online (Sandbox Code Playgroud)

Dav*_*lis 7

查看实际的kotlincbash 脚本后,堆大小选项是根据以下行的环境变量设置的:

[ -n "$JAVA_OPTS" ] || JAVA_OPTS="-Xmx256M -Xms32M"
Run Code Online (Sandbox Code Playgroud)

在执行 kotlin 脚本之前设置此环境变量可以增加堆大小。

对于上面的示例,以下内容适用于 Linux/MacO:

$ export JAVA_OPTS="-Xmx8g"
$ kotlinc -script myscript.kts
Run Code Online (Sandbox Code Playgroud)

在 Windows 上:

set JAVA_OPTS="-Xmx8g"
Run Code Online (Sandbox Code Playgroud)

  • 您可以将其放在脚本开头的 shebang 中,例如: ```#!/usr/bin/env -S JAVA_OPTS="-Xmx8g" kotlinc -script --``` (2认同)