javac
has一个有趣的-O
选项:
通过内联静态,最终和私有方法来优化编译代码。 请注意,您的课程可能会变得更大。
这个选项似乎不受欢迎(隐藏?),我今天刚刚在CodeCup 2014 page上发现了它。
official documentation或man javac
中没有提及{p> -O
...奇怪。
在对类似question的接受回答中,我们可以读到:
Java中的优化主要由JIT编译器在运行时完成。 因此,试图指导它优化某一点毫无意义 在编译时的方式(无论如何它只创建字节码)。该 知道了,JIT几乎肯定会在现场做出更好的决定 确切的环境和观察实际的执行模式 代码的特定部分。
我的问题是:
我是否应始终使用-O
选项?换句话说,代码始终使用-O
运行得更快,或者根本不会产生任何差异?
也许班级规模会增加太多以至于整体表现会下降?或者JVM无论如何都会进行内联,所以最好留下它?
类似的故事was,标有gcc -O3
。
答案 0 :(得分:36)
根据第553行the source code中的评论,这是一个无操作。
当JIT编译器效率不高或根本没有JIT编译器时,这可能很有用。
答案 1 :(得分:7)
我几乎从一开始就使用Java。我已经构建了许多系统,其中一些是高性能的,其中一些是极端的性能,而且我从未发现这个标志有用。我认为它可能曾经有过使用,但我从来不需要关心。
答案 2 :(得分:6)