代码之家  ›  专栏  ›  技术社区  ›  Xavier Nodet

编译Java时使用多核/处理器

  •  26
  • Xavier Nodet  · 技术社区  · 14 年前

    我使用一个八内核的桌面来构建一个使用Ant(通过JavaCarget)的Java应用程序。有没有一种方法可以通过使用多个线程或进程来加速编译?

    我知道我可以并行运行多个Ant任务,但我不认为这可以应用于单个编译目标,还是?

    6 回复  |  直到 14 年前
        1
  •  17
  •   Joachim Sauer    14 年前

    我不知道有什么方法可以告诉Ant自己有效地利用多个内核。但是 you can tell ant to use the Eclipse Compiler ,支持 multithreaded compilation 内置。

        2
  •  2
  •   Matti Lyra    14 年前

    只要您所调用的javac不使用所有核心,那么您在Ant中所说的内容并不重要。您可以使用 compiler 属性定义应为该任务使用哪种Java编译器。

    如果有多个构建目标,则可以使用 fork=yes 从外部执行目标。

    http://ant.apache.org/manual/Tasks/javac.html#compilervalues

        3
  •  1
  •   bosmacs    14 年前

    The documentation 似乎表明它不太可能与 javac .

    任何试图并行运行大型Ant任务序列的人,比如同时运行javadoc和javac,都在隐式地承担识别和修复所有并发错误(它们运行的任务)的任务。

    因此,虽然此任务已被使用,但它应被视为高级任务,应在某些批处理或测试情况下使用,而不是在多路CPU上加快构建时间的简单技巧。

        4
  •  0
  •   Thorbjørn Ravn Andersen    14 年前

    据我所知。Eclipse编译器已经做了一些工作来加速多核的使用,但它的购买量并不像您希望的那样多。

    问题是,您是否能够为开发而进行增量编译,并且只重新编译那些更改过的内容?然后可以将完全重建留给生成服务器。

        5
  •  0
  •   Lior    8 年前

    你可以用 Buck Build 以提高构建速度并利用多个核心。

    简而言之:

    Buck是Facebook开发和使用的构建系统。它鼓励 创建由代码和 资源,并支持许多平台上的各种语言。

    Buck并行构建独立的工件以利用多个 您机器上的核心。此外,它还减少了增量构建时间 跟踪不变的模块,使模块的最小集合 是重建的。

        6
  •  0
  •   Alexander Mills    5 年前

    我认为这可能没有多大帮助,因为javac可以提取内存中的所有文件,如果必须对多个进程执行此操作,则只需加倍努力。但是,如果要编译两个完全不同的Java代码块,那么您可以这样做:

    #!/usr/bin/env bash
    
    javac file1.java &
    javac file2.java &
    javac file3.java &
    
    wait;
    

    如果这3个文件的依赖关系大部分不同,那么它可能会节省时间,如果依赖关系重叠,那么它可能不会节省很多时间。

    推荐文章