ANTLR4内存清理

时间:2015-02-25 16:29:20

标签: memory-leaks antlr antlr4

是否可以解除分配/重置/压缩ANTLR分配的内存?

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

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

2 个答案:

答案 0 :(得分:3)

有趣。答案是我现在不会说的。我将在https://github.com/antlr/antlr4添加一个问题。

答案 1 :(得分:3)

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

lexer.setInterpreter(new LexerATNSimulator(lexer, lexer.getATN(), lexer.getInterpreter().decisionToDFA, new PredictionContextCache()));
parser.setInterpreter(new ParserATNSimulator(parser, parser.getATN(), parser.getInterpreter().decisionToDFA, new PredictionContextCache()));