scala工具2.9.0和总加载类问题

时间:2012-01-26 16:20:11

标签: class scala

我们正在使用tools.nsc.interpreter.IMain的interpret()方法在服务器上执行scala脚本。工作得很好,没有内存泄漏等。唯一的问题是jvisualvm报告“总加载”类正在增加此过程(不会饱和)。

是否由于explain()导致?

过程加载的总类是我们应该关注的吗?堆大小非常好。

我们使用的是scala 2.9.0和Java 7u2

2 个答案:

答案 0 :(得分:2)

我认为你应该担心,因为类往往被加载到perm gen空间(它被分别报告给堆)

当您在“运行时”运行编译器时(通过它的声音一遍又一遍),您最终可能会将许多类加载到perm gen中。如果我是你,我会测试系统中的文件数量比你打算在现场使用的数量要大得多,看看你是否有填补烫发的危险。

JVM有一个选项可以让JVM在运行时卸载类。这可能有所帮助,但我建议你在

之前和之后进行测试
-XX:+CMSClassUnloadingEnabled

答案 1 :(得分:0)

如果我是正确的,那是因为类定义存储在不可变的空间洞察JVM(PermGen)中,并且它不是特定于Scala的。任何进行动态类加载的Java应用程序都会受到影响(即JRebel)。

我听说有计划改变,也许已经在JRE7