我需要使用scala解释器编写一个程序来动态运行scala代码。解释器必须能够在不重启的情况下运行无限数量的代码。我知道每次调用类scala.tools.nsc.interpreter.IMain的方法interpret()时,都会存储请求,因此内存使用量将永远上升。以下是我想要做的事情:
var interpreter = new IMain
while (true)
{
interpreter.interpret(some code to be run on the fly)
}如果方法interpret()每次都存储请求,那么有没有办法清除存储的请求的缓冲区?例如,我现在要做的是计算方法interpret()被调用的次数,然后在次数达到100时获得一个新的IMain实例。下面是我的代码:
var interpreter = new IMain
var counter = 0
while (true)
{
interpreter.interpret(some code to be run on the fly)
counter = counter + 1
if (counter > 100)
{
interpreter = new IMain
counter = 0
}
}然而,我仍然看到内存使用率永远在上升。看起来IMain实例并没有被JVM垃圾回收。
有人能帮我解决这个问题吗?我真的需要能够让我的程序在不重启的情况下运行很长一段时间,但我不能只为scala解释器使用这样的内存。
提前谢谢你,
宠物
发布于 2011-10-25 00:14:38
在重新赋值之前,尝试调用解释器上的close方法
https://stackoverflow.com/questions/7787831
复制相似问题