Comme par ref-doc:Groovy: re-compiler une classe de fichiers et les fuites mémoire
A GroovyClassLoader conserve une référence de toutes les classes qu'il a créées, il est donc facile de créer une fuite de mémoire. En particulier, si vous exécutez le même script deux fois, s'il s'agit d'une chaîne, alors vous obtenez deux classes distinctes!
J'utilise un fichier comme source pour l'analyse syntaxique, mais se sont mise en cache hors:
GroovyCodeSource src = new GroovyCodeSource(file)
src.cachable = false
Class clazz = groovyClassLoader.parseClass src
Class clazz1 = groovyClassLoader.parseClass src
log.info "$clazz <=> $clazz1 equal: ${clazz == clazz1}"
la sortie du journal est toujours
classe MyClass < => classe MyClass égale: false
Si je commente la ligne src.cachable = false
, alors les instances de classe deviennent moi égal, mais ils ne re-compilent pas même si le fichier sous-jacent a changé.
D'où la question suivante: comment recompiler des classes correctement sans créer de fuite de mémoire?