【发布时间】:2014-01-22 13:54:00
【问题描述】:
javachas 一个有趣的-O 选项:
通过内联静态、最终和私有方法来优化编译代码。 请注意,您的类可能会变大。
这个选项似乎不受欢迎(隐藏?),我今天刚刚在CodeCup 2014 page 上发现了它。
-O 在official documentation 和man javac 中都没有提及...奇怪。
在接受类似question 的回答中,我们可以读到:
Java 中的优化主要由 JIT 编译器在运行时完成。 因此,没有必要试图指示它优化某个 编译时的方式(无论如何它只创建字节码)。这 JIT 几乎肯定会在现场做出更好的决策,因为他们知道 确切的环境并观察执行的实际模式 代码的特定部分。
我的问题是:
我应该始终使用-O 选项吗? 换句话说,使用-O 的代码总是运行得更快,还是根本没有区别?
也许班级人数会增加太多以至于整体性能会下降?或者 JVM 无论如何都会做内联,所以最好留给它?
类似的故事was 与gcc -O3 标志。
【问题讨论】:
-
我不知道这个标志。也许我用 Java 做的工作不需要这种优化。我建议单独评估它,看看它的表现如何,因为答案可能是“这取决于你在做什么”。
-
接受的答案不是也回答了您的问题吗?如果 JIT 编译器最终完成所有工作(并且更好),似乎没有理由使用该标志。
-
对于任何语言来说,内联永远不会成为任何情况下的优化。在某些情况下,它可能是有意义的。对于大多数其他人来说,可能不是。与几乎所有优化一样,解决方案是对其进行基准测试,看看它是否适合您的情况。
-
@Izmaki 不,不完全是,我认为帮助 JIT 并且已经进行内联可能会很好,因为 JIT 会在一段时间后打开。
-
投反对票的人能否评论一下这个问题有什么问题?
标签: java optimization compiler-construction javac