Scala Interpreter scala.tools.nsc.interpreter.IMain Утечка памяти - PullRequest
1 голос
/ 17 октября 2011

Мне нужно написать программу, использующую интерпретатор scala для запуска кода на лету.Интерпретатор должен иметь возможность выполнять бесконечное количество кода без перезапуска.Я знаю, что каждый раз, когда вызывается метод interpret () класса scala.tools.nsc.interpreter.IMain, запрос сохраняется, поэтому использование памяти будет расти вечно.Вот идея того, что я хотел бы сделать:

var interpreter = new IMain
while (true)
{
    interpreter.interpret(some code to be run on the fly)
}

Если метод interpret () сохраняет запрос каждый раз, есть ли способ очистить буфер хранимых запросов?Сейчас я пытаюсь подсчитать, сколько раз вызывается метод interpret (), а затем получить новый экземпляр IMain, например, когда число раз достигнет 100.Вот мой код:

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.

Заранее спасибо,

Домашнее животное

1 Ответ

0 голосов
/ 24 октября 2011

попробуйте вызвать метод close в интерпретаторе перед переназначением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...