scala nsc IMain bind () проблемы со скоростью и памятью - PullRequest
2 голосов
/ 14 февраля 2012

Мы используем методы bind () и interpret () tools.nsc.interpreter.IMain для выполнения скриптов scala на сервере.Это включено в Scala 2.9.1 и Java 7u2.

После многократного использования одного и того же экземпляра IMain методы bind () внезапно начинают занимать очень много времени (5-6 секунд и даже дольше).Я пытался закрыть () сброс (), но ничего не помогает.Странно то, что внезапное замедление происходит после нескольких использований.

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)
...