java - Scala SBT运行时的第二个-Xmx参数

标签 java scala jvm sbt

我正在尝试使用 sbt“run”命令运行一个占用大量内存的程序,并且我似乎遇到了这样的问题:jvm 似乎从某个覆盖我的参数的地方获取了第二个 -Xmx 参数。

我正在通过“sbt run”运行该程序。

查看进程我可以发现以下内容:

/usr/bin/java -XX:MaxPermSize=256M -Xmx32G -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -jar /usr/local/Cellar/sbt/0.13.6/libexec/sbt-launch.jar run

我的sbt文件如下:

lazy val commonSettings = Seq(
    organization := "edu.university",
    version := "0.1.0",
    scalaVersion := "2.10.2",
    name := "Example",
    javaOptions += "-Xmx32G"
)

如果您想测试它,这是我创建的一段代码,它只是填充内存。

package edu.university

import java.lang.Thread
import scala.collection.mutable.ArrayBuffer

object Main {
    val arraySize = 10000
    val nmws = 160000000 // no OOM
    // val nmws = 180000000 // OOM
    val r = scala.util.Random
    def main(args: Array[String]): Unit = {
        println("hi")
        val ab = new ArrayBuffer[Memwaster](nmws)
        ab.transform { a => new Memwaster(r.nextInt) }
        println("done")
        Thread.sleep(20000)
    }
}
class Memwaster(foo: Int)

使用较大的 nmws 值运行将使用略多于 1G 的内存,然后抛出内存不足错误。

最佳答案

事实证明,一种解决方案是在 sbtopts 中设置 -mem 选项。我在/usr/local/etc/sbtopts (在 OSx Yosemite 下)找到了我的 sbtopts。对于 32G,我将其设置为“-mem 32000”。如果这是一个不好的解决方案,请发布另一个答案,我很高兴在这里听到意见。

Sorta 通过以下文档解决了这个问题: https://opensource.ncsa.illinois.edu/confluence/display/DFDL/Configure+SBT

这看起来像是我的 build.sbt 中的 javaOptions 值没有覆盖它的错误吗?或者这是出于某种原因所期望的行为?

关于java - Scala SBT运行时的第二个-Xmx参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31252159/

相关文章:

java - 如何将 SOAP 操作添加到 java 中的 web 服务?

scala - Scala 文档示例中的 "macro implementation reference has wrong shape"

Scala 解释器说对象不是包的成员,当它是时

java - 如何设置 XML 源 URL

Java 泛型 - 桥接方法?

java - 错误 :(453, 69) 不允许使用字符串类型(在 'activity_horizontal_margin' 处,值为 '')

Scala:尝试了扩展方法,但无法完全构造(多个类上的扩展名称相同)

java - 向正在运行的 JVM 发送信号

java - Java 字节码是什么样的?

java - 解决 JVM 堆大小设置未传播到应用程序的问题