【问题标题】:How can I decrease the memory heap for my scala project using Sbt?如何使用 Sbt 减少我的 scala 项目的内存堆?
【发布时间】:2020-10-16 23:00:56
【问题描述】:

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

【问题讨论】:

  • 如果你的项目是在 Scala 中,我怀疑javacOptions 会做任何事情。您可能必须将其作为选项添加到 java 命令中
  • sbt -mem <max memory size> 应该可以工作。

标签: scala javafx sbt


【解决方案1】:

如果您在项目中使用 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"""
      )
    )

【讨论】:

    【解决方案2】:

    javacOptionsused to pass Java compiler flags,如果你有 Java 文件要在你的项目中编译。

    如果您从 sbt 运行项目,您可以设置 JVM_OPTS 环境变量或创建 .jvmopts 文件。它们必须以这种方式配置,因为当 JVM 运行时,它无法设置自己的 JVM 配置。虽然如果你想在 fork 中运行程序并让 sbt 使用不同的配置,你可以使用 SBT_OPTS 将 sbt 与 fork 分开配置。

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

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2017-11-13
      相关资源
      最近更新 更多