我应该使用javac -O选项进行优化吗?

时间:2014-01-05 00:03:18

标签: java optimization compiler-construction javac

javac has一个有趣的-O选项:

  

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

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

official documentationman javac中没有提及{p> -O ...奇怪。

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

  

Java中的优化主要由JIT编译器在运行时完成。   因此,试图指导它优化某一点毫无意义   在编译时的方式(无论如何它只创建字节码)。该   知道了,JIT几乎肯定会在现场做出更好的决定   确切的环境和观察实际的执行模式   代码的特定部分。

我的问题是:

我是否应始终使用-O选项?换句话说,代码始终使用-O运行得更快,或者根本不会产生任何差异?

也许班级规模会增加太多以至于整体表现会下降?或者JVM无论如何都会进行内联,所以最好留下它?

类似的故事was,标有gcc -O3

3 个答案:

答案 0 :(得分:36)

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:6)

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

  

-O 通过内联静态,最终和私有方法来优化编译代码。   请注意,您的课程可能会受到更大的注射。

请查看以下问题:

<强>更新

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

link中找到两个目录 - 这是 jdk 1.1.3的文档。这是13 - 14岁!我们现在正在Jdk 7,并急切地等待Jdk 8。