我需要使用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
}
}
但是,我仍然看到内存使用率正在上升。似乎Jain实例不会被JVM垃圾收集。
有人可以帮我解决这个问题吗?我真的需要能够保持我的程序运行很长一段时间而不重新启动,但我无法负担scala解释器的这种内存使用。
提前致谢,
宠物
答案 0 :(得分:0)
尝试在重新分配之前调用解释器上的close
方法