首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反V4 + Java8语法-> OutOfMemoryException

反V4 + Java8语法-> OutOfMemoryException
EN

Stack Overflow用户
提问于 2015-10-02 14:55:06
回答 1查看 1.7K关注 0票数 5

我试图将ANTLR V4与公开提供的Java 8语法- https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4结合使用

我生成了类文件并试图解析Java 8 JRE,但不知怎么在java.text.SimpleDateFormat.java上它会崩溃:

代码语言:javascript
复制
java.lang.OutOfMemoryError: GC overhead limit exceeded

当我试图单独解析单个文件时,它还会使崩溃

这个问题能解决吗?显然,ANTLR V4不能处理超过2000 LOC的文件?这是正确的假设吗?

我到目前为止所做的事:

  • 在多个步骤中将分配给JVM的内存从256 it更改为4GBJVM,然后更改为 java.lang.OutOfMemoryError: Java堆空间
  • 以确保输入文件没有语法问题。 首先,我删除了文件的前半部分文件-> 解析似乎还可以, 然后撤消该操作,删除了文件的下半部分, -> 解析似乎还可以
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-03 02:53:51

看起来,存储库中的语法是基于我编写的语法。语法依赖于某些功能,这些功能只有在我的"optimized" fork of ANTLR 4中才能使用,这样才能更好地执行。除了使用该版本之外,您还需要做以下两件事来最大限度地提高性能:

  1. 使用两阶段解析策略。假设您的开始规则名为compilationUnit,它可能如下所示: parser.getInterpreter().setPredictionMode(PredictionMode.SLL);parser.getInterpreter().tail_call_preserves_sll = false;compilationUnit = parser.compilationUnit();} CompilationUnitContext (ParseCancellationException e) { //第2阶段:复杂和/或错误文档// TODO的高精度回退分析:重置输入流parser.setErrorHandler(新的DefaultErrorStrategy());parser.getInterpreter().setPredictionMode(PredictionMode.LL);parser.getInterpreter().tail_call_preserves_sll = false;parser.getInterpreter().enable_global_context_dfa = true;compilationUnit = parser.compilationUnit();}
  2. 启用全局上下文DFA (我将其包含在前面的代码块中,这样您就不会错过它) parser.getInterpreter().enable_global_context_dfa =真;
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32910013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档