RFR: 8247524: Remove unnecessary volatile qualifiers from member functions

David Holmes david.holmes at oracle.com
Mon Jun 15 06:59:19 UTC 2020


Hi Kim,

On 15/06/2020 9:15 am, Kim Barrett wrote:
> Please review this change to oopDesc and Metadata classes, removing
> unnecessary volatile qualifiers from some member functions.
> 
> This change also makes virtual overrides of the relevant functions
> explicitly virtual.
> 
> While there, removed unnecessary workaround in oopDesc::klass_or_null_acquire.
> 
> After this change,
>    egrep -r -H --exclude-dir=.hg "\)\s*(const |)\s*volatile" src/hotspot
> finds nothing; there seem to be no remaining volatile qualified methods.

I must admit I'm quite confused as to why anyone would ever have placed 
a volatile modifier on a method that returns a constant true or false 
??? What could it possibly mean?

On the other hand for a mutable field e.g.:

size_t size() const volatile { return _word_size; }

I can see an expectation that the volatile would force the compiler to 
always reload _word_size, even if the field itself was not declared 
volatile (which it isn't). Isn't this how we are now handling things via 
Atomic::load - where the field is no longer flagged volatile but the 
load is so that we still tell the compiler not to make assumptions about 
potentially caching the field?

Thanks,
David

> CR:
> https://bugs.openjdk.java.net/browse/JDK-8247524
> 
> Webrev:
> https://cr.openjdk.java.net/~kbarrett/8247524/open.00/
> 
> Testing:
> mach5 tier1-3
> 


More information about the hotspot-dev mailing list