RFR: jsr166 jdk9 integration wave 9
martinrb at google.com
Thu Aug 11 18:59:43 UTC 2016
On Thu, Aug 11, 2016 at 10:40 AM, Aleksey Shipilev <
aleksey.shipilev at gmail.com> wrote:
> On 08/11/2016 04:34 AM, Martin Buchholz wrote:
> > Again, no spec changes, but larger than expected.
> > http://cr.openjdk.java.net/~martin/webrevs/openjdk9/
> Why doesn't AtomicBoolean.getAndSet use VarHandle.getAndSet, which is
> hopefully intrinsified completely?
Good question. This optimization originated in a suggestion for jdk8,
where there are no VarHandles.
VarHandle.getAndSet does not know there are only two values for the int, so
it is not obvious which one wins. I can imagine getAndSet being compiled
to a weak cas loop.
> I like the single-CAS version too, but it probably warrants some
> explanation. Suggestion: "Since there are only two boolean values,
> single CAS is enough, because there are only two possibilities: a) CAS
> succeeds: the actual value needed change, and therefore it was a
> complement of new value; b) CAS fails: the actual value was exactly the
> new value."
I like the current terse comment. The natural explanation would be to
construct a boolean truth table with all possible inputs and verify we get
the right answer. But more trustworthy is the test, I think.
> Any benchmarks backing up this optimization?
I measured a reduction in bytecode! Does that count?
More information about the core-libs-dev