类文件格式的最终​​变量

Mic*_*zyk 6 java performance jit final bytecode

文件格式是否为使用变量的最终关键字提供支持?
或者它只是从代码中推断出变量的有效终结性而JIT编译器基于它执行优化?

这里,在类文件格式文档中,他们提到了关于final关键字,但仅限于将其与final块final类一起使用的情况.最终变量
没有任何内容.

apa*_*gin 7

不,在类文件中没有编码这样的信息.

您可以通过使用final局部变量编译源文件来轻松验证这一点,而不使用final- 结果类将是相同的.

但是,Java 8添加了一个MethodParameters属性,用于记录有关方法参数的名称和访问标志的信息.这意味着,您可以检查方法参数是否是final.

即时编译器不需要了解final本地人 - 他们可以轻松确定任何表达式的实际范围.即使变量不是最终的,例如

    int x = 1;
    // ... code A ...

    x = 2;
    // ... code B ...
Run Code Online (Sandbox Code Playgroud)

编译器将优化代码A,就像x始终一样1,并且代码B似乎x总是如此2.