final vs. volatile instance fields
peter.levart at gmail.com
Wed Dec 26 03:58:21 PST 2012
Hi hotspot gurus,
I have a question (actually two) someone might answer off the top of
Are there any performance differences in reading and writing of volatile
vs. final instance fields? I can see that reflection is doing the same
for both types (via UnsafeQualifiedFieldAccessorImpl subtypes) and is
reading/writing the fields using Unsafe.getXxxVolatile/putXxxVolatile.
So what does the JIT compiled code do?
a) Are there any differences between writing to those two types of
fields? The Java spec. mandates writing to final fields exactly once in
the constructors and Java Memory Model says that they are "frozen" at
the end of constructor. What does "freeze" actually translate to in the
b) I can understand that the JIT compiler can generate code that caches
the value of final field say in a register, but initially the code has
to load the value from a final field and the question is whether this
initial load is any different from a volatile read?
More information about the hotspot-runtime-dev