scala nsc IMain bind()速度和内存问题

时间:2012-02-13 21:05:30

标签: scala compiler-construction bind

我们使用tools.nsc.interpreter.IMain的bind()和interpret()方法在服务器上执行scala脚本。这是在scala 2.9.1和Java 7u2上。

重复使用相同的IMain实例后,bind()方法突然开始花费很长时间(5-6秒甚至更长)。我试过close()reset()但没有任何帮助。奇怪的是,经过多次使用后突然发生缓慢。

enter image description here

代码段(一遍又一遍地执行):

main.bind("status", status)
try {
    main.interpret(prepare(restriction, input))
} catch {
    case e: Exception =>
        status.setCode("ERR6")
        status.setSummary("Error Interpreting Restriction")
        status.setType(MetaFileElements.ERROR_VALUE)
        status.setValue("Restriction: \"" + restriction + "\", Input: \"" + input + "\"")
}

另一个问题是,该过程因此错误而崩溃:

Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
    at java.lang.ClassLoader.findBootstrapClass(Native Method)
    at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:1061)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:412)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:410)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at scala.tools.nsc.util.Exceptional$.unwrap(Exceptional.scala:140)
    at scala.tools.nsc.interpreter.IMain$Request$$anonfun$handleException$1$1.apply(IMain.scala:821)
    at scala.tools.nsc.interpreter.IMain$Request$$anonfun$handleException$1$1.apply(IMain.scala:818)
    at scala.tools.nsc.interpreter.IMain$$anonfun$withoutBindingLastException$2.apply(IMain.scala:228)
    at scala.util.control.Exception$Catch.apply(Exception.scala:88)
    at scala.tools.nsc.interpreter.IMain.withoutBindingLastException(IMain.scala:226)
    at scala.tools.nsc.interpreter.IMain$Request.handleException$1(IMain.scala:818)
    at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:838)
    at scala.tools.nsc.interpreter.IMain.loadAndRunReq$1(IMain.scala:471)
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:503)
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:468)
    at scala.tools.nsc.interpreter.IMain.bind(IMain.scala:525)
    at scala.tools.nsc.interpreter.IMain.bind(IMain.scala:544)
    at scala.tools.nsc.interpreter.IMain.bind(IMain.scala:545)
    at com.nomura.fi.spg.kozo.meta.client.helper.RestrictionsHelper$.execute(RestrictionsHelper.scala:22)

0 个答案:

没有答案