ANTLR4 内存清理

Lou*_*uis 3 memory-leaks antlr antlr4

是否可以取消分配/重置/压缩由 ANTLR 分配的内存?

我已经使用了ParserATNSimulator.clearDFA(),但仍然分配了一些巨大的对象(例如ArrayPredictionContext,,SingletonPredictionContext)。

我的程序交替解析和计算阶段。在两个解析阶段之间,我想减少 ANTLR 的内存占用。

Lou*_*uis 5

如果我替换解析器和词法分析器的缓存,这些数据结构和一些静态字段之间就没有更多的路径了。因此垃圾收集器可以收集它们。

lexer.setInterpreter(new LexerATNSimulator(lexer, lexer.getATN(), lexer.getInterpreter().decisionToDFA, new PredictionContextCache()));
parser.setInterpreter(new ParserATNSimulator(parser, parser.getATN(), parser.getInterpreter().decisionToDFA, new PredictionContextCache()));
Run Code Online (Sandbox Code Playgroud)