如何使用 Sbt 减少我的 Scala 项目的内存堆?

How can I decrease the memory heap for my scala project using Sbt?

我正在使用 scala 构建一个 javafx 项目,我注意到内存使用量超过 170mb,而一个空白的 javafx 项目大约为 90mb。我看到 页面,它说堆中的大部分内存未被使用,并解释了一种使用此标志缩小堆的方法:--XX:+UseG1GC。我在 sbt 中尝试使用: javacOptions += "--XX:+UseG1GC" 在 Sbt 中,但内存使用保持不变。谁能帮我缩小这个堆?

javacOptionsused to pass Java compiler flags 如果你有 Java 归档在你的项目中编译。

如果您是来自 sbt 的 运行ning 项目,您可以设置 JVM_OPTS 环境变量或创建一个 .jvmopts 文件。它们必须以这种方式配置,因为当 JVM 运行ning 时,它无法设置自己的 JVM 配置。尽管如果你想 运行 在 fork 中编程并让 sbt 使用不同的配置,你可以使用 SBT_OPTS 来独立于 fork 配置 sbt。

顺便说一句。如果您有一些问题,您可以随时使用 sbt-extras 包装器,这会使事情变得更容易。它使用一些更明智的默认值,如果它丢失等下载 sbt

如果您在项目中使用 SBT 本机打包程序,除了 JVM_OPTS.jvmopts 之外,您还可以向生成的执行脚本添加标志(或其他一些自定义命令)。这就是我们在项目中的做法:

    project.in(file("example")).settings(
      batScriptExtraDefines ++= Seq( //Windows bat/cmd
        """set _JAVA_OPTS=!_JAVA_OPTS! -Djdk.tls.ephemeralDHKeySize=2048""",
        """set _JAVA_OPTS=!_JAVA_OPTS! -Djdk.tls.rejectClientInitiatedRenegotiation=true"""
      ),

      bashScriptExtraDefines ++= Seq( //Unix shell
        """addJava "-Djdk.tls.ephemeralDHKeySize=2048"""",
        """addJava "-Djdk.tls.rejectClientInitiatedRenegotiation=true"""",
        """umask 077"""
      )
    )