How «final» is final?

Although the concept of «final» fields is quite simple, its implementation in Java can lead to
surprising effects. First of all, the Java VM and Java language have a slightly different
understanding of "final". Second (and unfortunately) declaring a field as final doesn't
mean that the VM or the programmer can really rely on its immutability.

This talk will show the different aspects of "finality" and their impact on the Java compiler and the Java VM.
It will demonstrate how finality can be circumvented in Java with the help of reflection or sun.misc.Unsafe.
And finally it will discuss the impacts this has on the optimizations done by the JIT compiler and various workarounds
like the non-standard @Stable annotation or -XX:TrustFinalNonStaticFields.

Volker Simonis

Works for SAP in the SAP JVM Technology group. OpenJDK contributor from the very beginning
and helped SAP and the SAP JVM team engage in the OpenJDK project. Project lead of the OpenJDK
PowerPC/AIX porting project, a JDK8 committer and JDK9 reviewer.