java - 为什么 javac 1.5 与 Eclipse 编译器相比运行速度如此之慢?

标签 java eclipse maven-2 javac

我有一个 Java Maven 项目,其中包含大约 800 个源文件(一些由 javacc/JTB 生成),用 javac 编译需要 25 分钟。

当我将 pom.xml 更改为使用 Eclipse 编译器时,编译大约需要 30 秒。

关于为什么 javac (1.5) 运行如此缓慢有什么建议吗? (我不想永久切换到 Eclipse 编译器,因为 Maven 的插件似乎有很多问题。)

我有一个很容易重现问题的测试用例。以下代码在默认包中生成了一些源文件。如果您尝试使用 javac 编译 ImplementingClass.java,它似乎会暂停很长时间。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;

public class CodeGenerator
{
    private final static String PATH = System.getProperty("java.io.tmpdir");
    private final static int NUM_TYPES = 1000;

    public static void main(String[] args) throws FileNotFoundException
    {
        PrintStream interfacePs = new PrintStream(PATH + File.separator + "Interface.java");
        PrintStream abstractClassPs = new PrintStream(PATH + File.separator + "AbstractClass.java");
        PrintStream implementingClassPs = new PrintStream(PATH + File.separator + "ImplementingClass.java");
        interfacePs.println("public interface Interface<T> {");
        abstractClassPs.println("public abstract class AbstractClass<T> implements Interface<T> {");
        implementingClassPs.println("public class ImplementingClass extends AbstractClass<Object> {");

        for (int i=0; i<NUM_TYPES; i++)
        {
            String nodeName = "Node" + i;
            PrintStream nodePs = new PrintStream(PATH + File.separator + nodeName + ".java");
            nodePs.printf("public class %s { }\n", nodeName);
            nodePs.close();
            interfacePs.printf("void visit(%s node, T obj);%n", nodeName);
            abstractClassPs.printf("public void visit(%s node, T obj) { System.out.println(obj.toString()); }%n", nodeName);
        }
        interfacePs.println("}");
        abstractClassPs.println("}");
        implementingClassPs.println("}");
        interfacePs.close();
        abstractClassPs.close();
        implementingClassPs.close();
    }
}

最佳答案

Sun 已通过电子邮件向我确认这是一个新错误(在他们的错误数据库中为 6827648)。

关于java - 为什么 javac 1.5 与 Eclipse 编译器相比运行速度如此之慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686545/

相关文章:

java - Android Studio 数据绑定(bind)错误,无法解析符号

android - Eclipse android首选项文件;无法读取键的值

eclipse - 在 Eclipse 中禁用 Ant 脚本的 DTD 警告?

java - 一组测试用例中的一个 testNG 测试用例失败,无法确定问题是什么?

java - 如何运行jetty :run-exploded in maven but prevent from assembling war again?

java - 不生成OSGI-INF文件夹

java - 比较数组中的连续元素并对相同值求和

java - 如何将WAR结构嵌入到桌面应用程序中?

java - JBoss AS 6 上的持续集成、selenium、Java EE 6

java - 您知道 Buildix 的替代品吗?