final vs. volatile instance fields

Sergey Kuksenko sergey.kuksenko at oracle.com
Wed Dec 26 04:30:24 PST 2012


Hi Peter,
You may find a general (not exactly about hotspot) answer in "The 
JSR-133 Cookbook for Compiler Writers".
http://g.oswego.edu/dl/jmm/cookbook.html

On 12/26/2012 03:58 PM, Peter Levart wrote:
> Hi hotspot gurus,
>
> I have a question (actually two) someone might answer off the top of
> his/her hat:
>
> 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
> compiled code?
>
> 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?
>
> Thank you,
>
> Peter
>


-- 
Best regards,
Sergey Kuksenko


More information about the hotspot-runtime-dev mailing list