[9] RFR (S): 8157181: Compilers accept modification of final fields outside initializer methods

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Tue Jun 14 12:17:10 UTC 2016

>> Also, have you run the JCK tests?
>> Why have a global flag if it's an error?
> We are enforcing a rule that has not been enforced before. To deal with
> compatibility issues we have provided, as is customary for non-security
> issues, a flag that allows the enforcement to be turned off, if it
> causes a problem. (Though that is more likely needed for JDK 7/8
> compatibility than for 9).

FTR I'd like to see the checks turned ON by default for 7/8 in 9 and the 
flag providing an escape hatch for compatibility purposes.

It is motivated by the desire to limit possibilities of final field 
updates at runtime, so JIT-compilers have more freedom optimizing loads 
from final fields. It will be unfortunate if we effectively forbid final 
field updates outside of initializers starting only from 9 (class files 
 >=53) and not 7 (cf >=51).

The change requires a CCC request and will be investigated separately 
(JDK-8159215 [1]).

If there are serious compatibility issues found during EA testing, we 
can turn the checks OFF by default.

The flag is declared as diagnostic, so I don't think we need to go 
through deprecation process (as we do for product flags) and just remove 
it in the next(?) major release.

Best regards,
Vladimir Ivanov

[1] https://bugs.openjdk.java.net/browse/JDK-8159215

More information about the hotspot-compiler-dev mailing list