我们正在使用tools.nsc.interpreter.IMain的interpret()方法在服务器上执行scala脚本。工作得很好,没有内存泄漏等。唯一的问题是jvisualvm报告“总加载”类正在增加此过程(不会饱和)。
是否由于explain()导致?
过程加载的总类是我们应该关注的吗?堆大小非常好。
我们使用的是scala 2.9.0和Java 7u2
答案 0 :(得分:2)
我认为你应该担心,因为类往往被加载到perm gen空间(它被分别报告给堆)
当您在“运行时”运行编译器时(通过它的声音一遍又一遍),您最终可能会将许多类加载到perm gen中。如果我是你,我会测试系统中的文件数量比你打算在现场使用的数量要大得多,看看你是否有填补烫发的危险。
JVM有一个选项可以让JVM在运行时卸载类。这可能有所帮助,但我建议你在
之前和之后进行测试-XX:+CMSClassUnloadingEnabled
答案 1 :(得分:0)
如果我是正确的,那是因为类定义存储在不可变的空间洞察JVM(PermGen)中,并且它不是特定于Scala的。任何进行动态类加载的Java应用程序都会受到影响(即JRebel)。
我听说有计划改变,也许已经在JRE7
了