On Thu, Aug 11, 2016 at 10:40 AM, Aleksey Shipilev < aleksey.shipi...@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/ > jsr166-jdk9-integration/ > > 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?