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

javac 一个有趣的选项:-O

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

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

-O官方文档中也没有提到,也没有在javac中提到...奇怪。

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

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

我的问题是:

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

也许班级规模可以增加很多,以至于整体表现会下降?或者JVM无论如何都会做内联,所以最好把它留给那个?

类似的故事发生在旗帜上。gcc -O3


答案 1

根据源代码中第 553 行周围的注释这是一个 no-op。

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


答案 2

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


推荐