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

Ada*_*zyk 28 java compiler-construction optimization javac

javac 一个有趣的-O选择:

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

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

-O中未提及的官方文件,也不在man javac......奇怪.

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

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

我的问题是:

我应该总是使用该-O选项吗?换句话说,代码总是运行得更快-O或根本没有差别?

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

类似的故事gcc -O3国旗.

ass*_*ias 36

根据第553行的源代码中的注释,这是一个无操作.

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


Eng*_*ery 7

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


Ane*_*ran 6

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

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

请查看以下问题:

更新

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

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

  • 是的,我接受了他的回答.哈哈,14岁,我的上帝,我发现了什么:D如果有人在谷歌写"javac"-O"选项",那么老页面会弹出第5个结果!但最近`javac -O`仍然"有效"(现在我们知道它什么都不做).我正在撤消-1,欢呼. (2认同)