2011-10-16 1 views
1

Je dois écrire un programme en utilisant l'interpréteur scala pour exécuter le code scala à la volée. L'interpréteur doit pouvoir exécuter une quantité infinie de code sans être redémarré. Je sais que chaque fois que la méthode interpret() de la classe scala.tools.nsc.interpreter.IMain est appelée, la requête est stockée, de sorte que l'utilisation de la mémoire continue à augmenter pour toujours. Voici l'idée de ce que je voudrais faire:Scala Interpreter scala.tools.nsc.interpreter.IMain Fuite de mémoire

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

Si la méthode interpréter() stocke la demande à chaque fois, est-il un moyen de vider la mémoire tampon des demandes stockées? Ce que j'essaye de faire maintenant est de compter le nombre de fois que la méthode interpréter() est appelée puis obtenir une nouvelle instance de IMain quand le nombre de fois atteint 100, par exemple. Voici mon code:

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 
    } 
} 

Cependant, je vois toujours que l'utilisation de la mémoire augmente à jamais. Il semble que les instances IMain ne sont pas récupérées par la JVM.

Quelqu'un pourrait m'aider à résoudre ce problème? J'ai vraiment besoin de pouvoir continuer mon programme pendant longtemps sans redémarrer, mais je ne peux pas me permettre une telle utilisation de la mémoire uniquement pour l'interpréteur de scala.

Merci à l'avance,

Pet

+1

Je ne pense pas qu'il va être un remède facile. Probablement pourquoi vous n'avez pas reçu beaucoup de réponses la première fois que vous avez posé la question. Je suppose que vous pouvez regarder comment sbt démarre et arrête l'interpréteur 'console'. Il peut avoir des astuces classloader pour décharger la mémoire de classe et de version. En passant, stackoverflow ne fonctionne pas pour vous? Si non, veuillez envisager d'accepter certaines réponses. – huynhjl

+0

"... comment sbt démarre et arrête l'interpréteur de console, il peut avoir des astuces classloader pour décharger la mémoire de classe et de version." Qu'est-ce que sbt ??? Pourriez-vous s'il vous plaît expliquer plus? J'ai vraiment besoin d'aide pour cela ... – Peter

+0

sbt est l'outil de construction simple de scala: https://github.com/harrah/xsbt/wiki – huynhjl

Répondre

0

essayer d'appeler la méthode close sur l'interprète avant réaffectant