1

当我处理一个或几个 java 文件时,我没有问题,但如果 java 的数量在 90 左右,我会得到“ java.lang.OutOfMemoryError: Java heap space”。我在 Eclipse 中有默认 VM 参数:

java.lang.OutOfMemoryError: -Xms1024M -Xmx3072M.

为每个 java 文件执行此代码。它在倒数第二行抛出异常。

ASTParser parser = ASTParser.newParser(AST.JLS3);
            parser.setResolveBindings(false);
            parser.setKind(ASTParser.K_COMPILATION_UNIT);
            final String text = buffer.toString();
            parser.setSource(text.toCharArray());
            final CompilationUnit node = (CompilationUnit) parser.createAST(null);


            node.accept( new ASTVisitor() {

                @Override
                public boolean visit(MethodDeclaration node) {

                    methodDeclaration.put( node.getName().toString(), node);
                    return super.visit(node);
                }
            });

            TypeDeclaration types = (TypeDeclaration)node.types().get(0);
            List<BodyDeclaration> body = types.bodyDeclarations();

错误:

java.lang.OutOfMemoryError: Java heap space
    at org.eclipse.jdt.internal.compiler.parser.Parser.newMessageSend(Parser.java:9191)
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeMethodInvocationName(Parser.java:4630)
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:5922)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9368)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9704)
    at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.parseStatements(MethodDeclaration.java:119)
    at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.parseMethods(TypeDeclaration.java:831)
    at org.eclipse.jdt.core.dom.CompilationUnitResolver.parse(CompilationUnitResolver.java:539)
    at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:1194)
    at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:801)
    at parser.infocaja.WindowParser.process(WindowParser.java:211)
    at parser.infocaja.WindowParser.main(WindowParser.java:117)
4

0 回答 0