【问题标题】:Should I use javac -O option to optimize?我应该使用 javac -O 选项进行优化吗?
【发布时间】:2014-01-22 13:54:00
【问题描述】:

javachas 一个有趣的-O 选项:

通过内联静态、最终和私有方法来优化编译代码。 请注意,您的类可能会变大。

这个选项似乎不受欢迎(隐藏?),我今天刚刚在CodeCup 2014 page 上发现了它。

-Oofficial documentationman javac 中都没有提及...奇怪。

在接受类似question 的回答中,我们可以读到:

Java 中的优化主要由 JIT 编译器在运行时完成。 因此,没有必要试图指示它优化某个 编译时的方式(无论如何它只创建字节码)。这 JIT 几乎肯定会在现场做出更好的决策,因为他们知道 确切的环境并观察执行的实际模式 代码的特定部分。

我的问题是:

我应该始终使用-O 选项吗? 换句话说,使用-O 的代码总是运行得更快,还是根本没有区别?

也许班级人数会增加太多以至于整体性能会下降?或者 JVM 无论如何都会做内联,所以最好留给它?

类似的故事wasgcc -O3 标志。

【问题讨论】:

  • 我不知道这个标志。也许我用 Java 做的工作不需要这种优化。我建议单独评估它,看看它的表现如何,因为答案可能是“这取决于你在做什么”。
  • 接受的答案不是也回答了您的问题吗?如果 JIT 编译器最终完成所有工作(并且更好),似乎没有理由使用该标志。
  • 对于任何语言来说,内联永远不会成为任何情况下的优化。在某些情况下,它可能是有意义的。对于大多数其他人来说,可能不是。与几乎所有优化一样,解决方案是对其进行基准测试,看看它是否适合您的情况。
  • @Izmaki 不,不完全是,我认为帮助 JIT 并且已经进行内联可能会很好,因为 JIT 会在一段时间后打开。
  • 投反对票的人能否评论一下这个问题有什么问题?

标签: java optimization compiler-construction javac


【解决方案1】:

根据the source code 第 553 行附近的评论,这是一个无操作。

当 JIT 编译器效率不高或根本没有 JIT 编译器时,它可能很有用。

【讨论】:

    【解决方案2】:

    几乎从 Java 一开始我就一直在使用它。我已经构建了许多系统,其中一些是高性能的,一些是高性能的,而我从来没有发现这个标志很有用。我想它可能曾经有用过,但我从来不需要关心。

    【讨论】:

      【解决方案3】:

      我不认为它像你想的那样做任何优化:

      -O 通过内联静态、最终和私有方法来优化编译代码。 请注意,您的类可能会变得更大。

      请查看以下问题:

      更新

      您不会在任何 Oracle 文档中找到它,因为它实际上什么都不做(无操作)。此外,您的 link 是一个非常古老的文档:

      在您的link 中上两个目录 - 这是 jdk 1.1.3 的文档。 它是 13 - 14 岁!我们现在在 Jdk 7 上并热切地等待 Jdk 8。

      【讨论】:

      • 好吧,您刚刚复制粘贴了问题中的引用。我看到了你提供的链接(当写一个问题时,显示类似的已经存在)。这些链接中甚至没有提到-O 选项。
      • @AdamStelmaszczyk - 我的意思是 -O 的作用(它没有真正的优化,而不是链接中的描述)。其他问题/答案解释了为什么不能对 Java 编译器和一些接近/小的替代方案进行任何优化。感谢您在我对您的问题投赞成票时投反对票!
      • 我们都知道它的作用,它是写出来的。而-O 确实进行了优化,它是编写的,通过内联优化编译的代码
      • @AdamStelmaszczyk - 你看过 assylias 的评论了吗?这是一个无操作,这意味着它实际上什么都不做!这就是为什么您在任何 Oracle 文档中都找不到它的原因!您提供的文档适用于 1.1.3 mate。在我的回答中查看我的更新。
      • 是的,我接受了他的回答。哈哈 14 岁,我的上帝,我发现了什么 :D 如果有人在 Google 中写 javac "-O" option,那么旧页面会作为第 5 个结果弹出!但是最近的javac -O 仍然“有效”(现在我们知道它什么都不做)。我正在撤消 -1,干杯。
      猜你喜欢
      • 2015-07-04
      • 2015-12-22
      • 2021-08-13
      • 2010-10-20
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多