Java编译器的优化
2022-08-31 13:58:36
最近,我正在阅读这篇文章。
根据该文章,Java编译器即javac在生成字节码时不执行任何优化。这是真的吗?如果是这样,那么是否可以将其实现为中间代码生成器以消除冗余并生成最佳代码?
最近,我正在阅读这篇文章。
根据该文章,Java编译器即javac在生成字节码时不执行任何优化。这是真的吗?如果是这样,那么是否可以将其实现为中间代码生成器以消除冗余并生成最佳代码?
javac
如果有的话,只会做很少的优化。
关键是JIT编译器完成了大部分的优化 - 如果它有很多信息,它的工作效果最好,如果执行优化,其中一些信息可能会丢失。如果执行某种循环展开,JIT将更难以一般方式自己执行此操作 - 并且它具有有关哪些优化实际起作用的更多信息,因为它知道目标平台。javac
javac
当我到达本节时,我停止了阅读:
更重要的是,javac编译器不会执行简单的优化,如循环展开,代数简化,强度降低等。为了获得这些好处和其他简单的优化,程序员必须在Java源代码上执行它们,而不是依靠javac编译器来执行它们。
首先,在Java源代码上进行循环展开并不是一个好主意。优化方式没有做太多事情的原因是它是由JVM中的JIT编译器完成的,它可以做出比编译器更好的决策,因为它可以准确地看到哪些代码运行得最多。javac