Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class scala tools 2.9.0和总加载类问题_Class_Scala - Fatal编程技术网

Class scala tools 2.9.0和总加载类问题

Class scala tools 2.9.0和总加载类问题,class,scala,Class,Scala,我们正在使用tools.nsc.interpreter.IMain的explorate()方法在服务器上执行scala脚本。工作很好,没有内存泄漏等。唯一的问题是,jvisualvm报告说,这个进程的“总负载”类正在增加(从未饱和) 它是由EXPLATE()引起的吗 进程加载的总类是我们应该关心的吗?堆大小表现得非常好 我们使用的是scala 2.9.0和Java 7u2,如果我没有记错的话,这是因为类定义存储在不可变空间洞察JVM(PermGen)中,而不是scala特有的。任何进行动态类加载

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

它是由EXPLATE()引起的吗

进程加载的总类是我们应该关心的吗?堆大小表现得非常好


我们使用的是scala 2.9.0和Java 7u2,如果我没有记错的话,这是因为类定义存储在不可变空间洞察JVM(PermGen)中,而不是scala特有的。任何进行动态类加载的Java应用程序都会受到这种影响(例如JRebel)


我听说有计划对此进行更改,可能已经在JRE7中了,我认为您应该担心,因为类倾向于加载到perm gen空间(这将单独报告给堆)

当你在“运行时”运行编译器时(一次又一次地听它的声音),你可能会在perm gen中加载很多类。如果我是你,我会用比你打算在live中使用的文件数量多得多的文件测试系统,看看你是否有填充perm gen的危险

JVM有一个选项,它将限制JVM在运行时卸载类的能力。这可能会有所帮助,但我建议您在测试前后进行测试

-XX:+CMSClassUnloadingEnabled

我应该提到,我们使用的是JDK-7u2.With-XX:+CMSClassUnloadingEnabled总加载类数不断增加,但unloaded=0。如果没有-XX:+cmsclasssUnloadingEnabled,我们会得到相同的行为。scala工具中是否有任何API我应该使用,而不是explorate(),或者,这是一种在脚本被解释后卸载类的方法吗?可能是在JVM开始尝试卸载类之前,您必须达到perm gen限制。在测试环境中减少perm gen的大小,然后启动大量脚本,看看随着时间的推移会发生什么。听起来这不像我想的那么简单。。。这取决于您使用的GC。