【发布时间】:2011-12-08 22:12:26
【问题描述】:
我需要使用 scala 解释器编写一个程序来即时运行 scala 代码。解释器必须能够在不重新启动的情况下运行无限量的代码。我知道每次调用 scala.tools.nsc.interpreter.IMain 类的方法 translate() 时,都会存储请求,因此内存使用量将永远上升。这是我想做的事情的想法:
var interpreter = new IMain
while (true)
{
interpreter.interpret(some code to be run on the fly)
}
如果interpret()方法每次都存储请求,有没有办法清除存储请求的缓冲区? 我现在要做的是计算方法 translate() 被调用的次数,然后在次数达到 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 解释器承担这样的内存使用量。
提前致谢,
宠物
【问题讨论】:
-
我不认为会有一个简单的补救措施。可能是为什么你第一次问这个问题时没有得到很多答案。我想你可以看看 sbt 如何启动和停止
console解释器。它可能有类加载器技巧来卸载类和释放内存。顺便说一句,stackoverflow 不适合你?如果没有,请考虑接受一些答案。 -
"... sbt 如何启动和停止控制台解释器。它可能有类加载器技巧来卸载类和释放内存。"什么是sbt???你能解释一下吗?我真的需要帮助...
-
sbt 是 scala 的简单构建工具:github.com/harrah/xsbt/wiki
-
这个问题是重复的。我找不到原件,但我记得有人问得很清楚。
标签: scala