【问题标题】:SBT Specify java heap size in Build.scalaSBT 在 Build.scala 中指定 java 堆大小
【发布时间】:2015-02-06 23:06:35
【问题描述】:

我的 Build.scala 文件内容。

val commonSettings = Seq(
version := "1.0.0",
organization := "com.collective",
scalaVersion := "2.11.4",
scalacOptions ++= List(
  "-encoding", "UTF-8",
  "-target:jvm-1.7",
  "-feature",
  "-unchecked",
  "-deprecation",
  "-Xlint",
  "-Xfatal-warnings"
),
resolvers ++= Seq(
  "ConJars" at "http://conjars.org/repo"
),
javaOptions in run += "-Xms256M -Xmx2G -XX:MaxPermSize=1024M -XX:+UseConcMarkSweepGC"
)

lazy val segmentFetcher = Project("segments-fetcher", file("."))
.settings(commonSettings: _*)
)

但是,当我执行时

sbt run

查看 jconsole,我在 Build.scala 中设置的堆大小没有被拾取。它只显示-Xmx512M。谁能告诉我我们如何强制 sbt 从项目构建文件中选择堆空间?

谢谢!

【问题讨论】:

    标签: scala sbt heap-size


    【解决方案1】:

    如果你想改变堆大小,你需要告诉 sbt 给fork another JVM(顺便说一下,这适用于任何 JVM 选项)。您可以使用fork 设置来执行此操作:

    fork in run := true
    

    另外,您要确保您的选项被正确分离(sbt 没有进行额外的解析):

    javaOptions in run ++= Seq(
        "-Xms256M", "-Xmx2G", "-XX:MaxPermSize=1024M", "-XX:+UseConcMarkSweepGC")
    

    或者,您可以在 sbt 运行器中设置堆大小。如果你使用的是普通的 sbt,你可以直接修改启动器脚本。如果您使用的是 sbt-extras,则可以使用 -J 标志将参数传递给 JVM:

    sbt -J-Xmx2G # etc.
    

    【讨论】:

    • 当我 fork in run := true, javaOptions in run += "-Xms256m -Xmx1024m -XX:+UseConcMarkSweepGC",我得到 [error] Invalid initial heap size: -Xms256m -Xmx1024m - XX:+UseConcMarkSweepGC [错误] 错误:无法创建Java虚拟机
    • 哦...没有意识到您的选项是错误的(sbt 不会将它们解析为多个参数)。更新了我的答案
    • 不是一个有效的命令:J-Xms1024M 不是一个有效的项目 ID:J-Xms1024M 预期的“:”(如果选择配置)不是一个有效的键:J-Xms1024M J-Xms1024M
    猜你喜欢
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2014-12-11
    相关资源
    最近更新 更多