最近,我正在读这篇文章.
根据那篇文章,Java Compiler即javac在生成字节码时不执行任何优化.这是真的吗?如果是这样,那么它可以作为中间代码生成器实现,以消除冗余并生成最佳代码吗?
我最近在C中编写了很多代码,现在正在转向Java.我目前正在实现一个大型数据结构,并且想知道在调用Java编译器时是否可以打开任何优化标志以提高gcc中的性能.
我习惯了:
gcc -O3 -NDEBUG MyProgram.c
Run Code Online (Sandbox Code Playgroud)
有一个类似的命令javac吗?
我正在使用JDK并且正在运行Ubuntu 10.04.
javac 有一个有趣的-O选择:
通过内联静态,最终和私有方法来优化编译代码.请注意,您的课程可能会变得更大.
这个选项似乎不受欢迎(隐藏?),我今天刚刚在CodeCup 2014页面上发现它.
-O中未提及的官方文件,也不在man javac......奇怪.
在对类似问题的接受答案中,我们可以读到:
Java中的优化主要由JIT编译器在运行时完成.因此,没有必要尝试指示它在编译时优化某种方式(无论如何它只创建字节码).JIT几乎肯定会在现场做出更好的决策,了解确切的环境并观察代码特定部分的实际执行模式.
我的问题是:
我应该总是使用该-O选项吗?换句话说,代码总是运行得更快-O或根本没有差别?
也许班级规模会增加太多,整体表现会下降?或者JVM无论如何都会进行内联,所以最好留下它?
类似的故事是与gcc -O3国旗.