javac
有一个有趣的-O
选项:
通过内联静态、最终和私有方法来优化编译代码。 请注意,您的班级规模可能会变大。
这个选项似乎不受欢迎(隐藏?),我今天才在 CodeCup 2014 page 上发现它。
-O
在官方文档和man javac
中都没有提到......奇怪。
在类似问题的接受答案中,我们可以读到:
Java中的优化主要是由JIT编译器在运行时完成的。 因此,尝试指示它优化某个特定的功能是没有意义的。 编译时的方式(当它只创建字节码时)。这 JIT 几乎肯定会当场做出更好的决策,了解情况 准确的环境并观察实际的执行模式 代码的特定部分。
我的问题是:
我是否应该始终使用
-O
选项? 换句话说,使用 -O
代码总是运行得更快,还是根本没有区别?
也许班级规模会增加太多,导致整体表现会下降?或者 JVM 无论如何都会进行内联,因此最好将其留给内联?
类似的故事是,带有
gcc -O3
旗帜。
根据源代码第 553 行周围的注释,这是一个无操作。
当 JIT 编译器效率不高或根本没有 JIT 编译器时,它可能很有用。
几乎从 Java 诞生以来我就一直在使用它。我构建了许多系统,其中一些是高性能的,一些是极限性能的,但我从来没有发现这个标志有用。我想它可能曾经有用过,但我从来不需要关心。