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

问题描述 投票:0回答:3

javac
一个有趣的
-O
选项:

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

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

-O
官方文档
man javac
中都没有提到......奇怪。

在类似问题的接受答案中,我们可以读到:

Java中的优化主要是由JIT编译器在运行时完成的。 因此,尝试指示它优化某个特定的功能是没有意义的。 编译时的方式(当它只创建字节码时)。这 JIT 几乎肯定会当场做出更好的决策,了解情况 准确的环境并观察实际的执行模式 代码的特定部分。

我的问题是:

我是否应该始终使用

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

也许班级规模会增加太多,导致整体表现会下降?或者 JVM 无论如何都会进行内联,因此最好将其留给内联?

类似的故事,带有

gcc -O3
旗帜。

java optimization javac
3个回答
39
投票

根据源代码第 553 行周围的注释,这是一个无操作。

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


7
投票

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


6
投票

我认为它没有像你想象的那样进行任何优化:

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

请看看这些问题:

更新

您不会在任何 Oracle 文档中找到此内容,因为它实际上根本不执行任何操作(无操作)。此外,您的链接是一个非常非常旧的文档:

link 中向上移动两个目录 - 这是 jdk 1.1.3 的文档。 它已有 13 - 14 岁了!我们现在正在使用 Jdk 7,并热切等待 Jdk 8。

© www.soinside.com 2019 - 2024. All rights reserved.