RFR: 8145680: Remove unnecessary explicit initialization of volatile variables in java.base
Claes Redestad
claes.redestad at oracle.com
Sat Dec 19 13:07:58 UTC 2015
Hi,
initializing volatile fields to their default value has a well-known
performance penalty, and removing these should typically be safe. This
patch addresses java.base.
There are however some corner cases that we need to check for, see
examples and discussion in
http://cs.oswego.edu/pipermail/concurrency-interest/2015-December/014767.html
When meticulously going through and checking each usage for odd pattern
like this I accidentally did a bit of extra cleanup, mostly addressing a
number of cases where the volatile field was being read twice. Sorry!
Bug: https://bugs.openjdk.java.net/browse/JDK-8145680
Webrev: http://cr.openjdk.java.net/~redestad/8145680/webrev.01/
It's easy to demonstrate the potential speed-up in microbenchmarks,
e.g., http://cr.openjdk.java.net/~redestad/8145680/DefaultInitBench.java
Note: when the parent bug was filed back in 2008 there was some internal
discussion about improving javac and/or the compiler to elide these
stores. That apparently led nowhere due to difficulty in detecting
various corner cases, and then the actual cleanup was forgotten. Let's
not go there this time, shall we?
Thanks!
/Claes
More information about the core-libs-dev
mailing list