Java规范 - “有效”优化的规则是什么

时间:2011-03-20 09:44:53

标签: java optimization specifications

我的理解是,如果优化没有与JLS相矛盾的可观察效果,​​则优化是有效的。因此,例如,JIT编译器可以在内部循环中优化“不执行任何操作”代码。

但我不记得这方面的明确声明。

当Java优化(例如由本机代码编译器执行)有效时,有没有人知道一个明确的声明(即在JLS或类似地位的文档中)?

3 个答案:

答案 0 :(得分:3)

JLS和JVM规范都指定了任何Java语句的行为(或JVM规范字节码的工作方式等),但他们没有说明 行为是什么发生。在两个文档中隐含的是,任何正确实现指定的抽象行为的实现都被认为是兼容的Java实现。拥有抽象标准背后的主要思想是指定必须在所有实现中共享哪些可观察行为,而不必详细说明使这些行为发生的原因。出于这个原因,只要它们不偏离指定的语义,就允许实现及其优化器执行他们认为必要且适当的任何操作,只要它们不偏离指定的语义。

希望这有帮助!

答案 1 :(得分:1)

编译器优化是有效的,只要它不会使代码的行为与标准不同。这适用于所有语言。

我认为没有必要明确说明这一事实,因为符合标准的编译器的唯一要求是它的行为与标准描述的一样。不改变其明显行为的优化显然不会改变它是否符合标准。

答案 2 :(得分:1)

例如,此处提到的String pool是一种优化形式。对于Integer和Long的小值,存在类似的概念。

也许您在这里找到更多interesting answers hereInteger pool的解释。