【问题标题】:Why isn't Javac running on multiple cores?为什么 Javac 不在多核上运行?
【发布时间】:2017-09-28 05:43:48
【问题描述】:

这看起来是一个很笼统的问题,但是 javac 不能同时编译的技术原因是什么?我读到 eclipse 编译器是并行的,那为什么不是 javac 呢?

【问题讨论】:

  • “非常技术性”的原因是 Sun / Oracle 没有以这种方式设计 / 实现 javac 编译器。我想他们有更重要的事情要做……在交付能够为 Oracle 赚钱的产品方面。
  • 那么打开jdk呢?
  • 怎么样?同样的推理也适用于那里。实际上,OpenJDK 的代码库与 Oracle 标记的 JDK 版本 99.x% 相同......并且由同一团队开发。
  • 我的意思是,现在有更多的空间来激励自己做一个更好的编译器。
  • 是相同的人(Oracle 员工),相同的 (Oracle) 经理设置他们的优先级。您认为它会使编译器变得更好,这只是您的意见。另一方面,如果您(我猜)有 12 个人月的时间花在 免费 检修 java 编译器(并且您有编译器编写技能),我建议您自愿 :-)

标签: java parallel-processing compiler-construction javac multicore


【解决方案1】:

编译器实际上并行工作是非常不寻常的,我找不到任何资料表明 Eclipse 的 Java 编译器是一个例外。

eclipse确实有能力做的,就是同时并行编译多个文件。这与 Eclipse 带有自己的 Java 编译器这一事实无关。如果它确实使用了 javac,它可以并行运行多个 javac 实例——这没有问题。事实上,当您使用多线程运行构建时,这正是 maven 等构建工具所做的。

【讨论】:

  • 你的意思是在不同的模块中并行编译? Gradle 也这样做,但这里我说的是并行编译 1 个模块。
  • @Snicolas 我的意思是并行编译不同的文件。完全有可能从同一个模块并行编译不同的文件(或者在没有模块的 Java 版本中这样做)。并行编译单个文件是不可能的。
【解决方案2】:

我认为它使javac程序变得简单,如果它是内部并行的,那么必须处理许多竞争条件,这使得事情变得复杂。要利用多核,您可以创建多个 javac 进程以达到相同的目标,makefile 和 gcc 似乎是这样工作的。

“保持简单和愚蠢”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多