【问题标题】:Using multiple cores/processors when compiling Java编译 Java 时使用多个内核/处理器
【发布时间】:2010-09-16 14:10:43
【问题描述】:

我使用具有八个内核的桌面来构建一个使用 Ant 的 Java 应用程序(通过 javac 目标)。有没有办法通过使用多个线程或进程来加快编译速度?

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

【问题讨论】:

标签: java ant parallel-builds


【解决方案1】:

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

【讨论】:

  • 这是一篇关于 Running Eclipse Java Compiler with Ant 的不错的博客文章。
  • 将 Intellij 2017.1.3 与 JDK 1.8 一起使用 javac 在这两种情况下最终都比 eclipse 编译器快 - 并行构建打开和关闭时。使用它在我们的项目中使用 Javac 重建大约需要 23 秒,使用 eclipse copmiler 重建需要大约 27 秒 - 奇怪,因为它是一个 4 核 i7 处理器。
  • 第一个链接坏了。
【解决方案2】:

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

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

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

【讨论】:

【解决方案3】:

The documentation 似乎表明它不太可能与javac 一起正常工作。

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

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

【讨论】:

  • 点赞,同样来自文档:Third party tasks may or may not be thread safe, and some of Ant's core tasks, such as <javac> are definitely not re-entrant.
【解决方案4】:

您可以使用Buck Build 来提高构建速度并利用多个内核。

简而言之:

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

Buck 并行构建独立工件以利用多个 您机器上的内核。此外,它通过以下方式减少增量构建时间 跟踪未更改的模块,以便最小化模块集 已重建。

【讨论】:

    【解决方案5】:

    据我所知没有。 Eclipse 编译器已经完成了一些工作以加快使用多核的速度,但它并没有像您希望的那样购买。

    问题是,您能否接受增量编译以进行开发,并且只重新编译那些已更改的内容?然后可以将完整的重建留给构建服务器。

    【讨论】:

      【解决方案6】:

      我认为它可能没有多大帮助,因为 javac 可以提取内存中的所有文件,如果它必须使用多个进程执行此操作,那只会加倍努力。但是,如果您想编译两段相当独立的 Java 代码,那么您可以这样做:

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

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

      【讨论】:

        猜你喜欢
        • 2010-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-03
        • 2017-03-06
        • 1970-01-01
        • 2022-01-03
        • 2018-04-27
        相关资源
        最近更新 更多