Skip to content

Instantly share code, notes, and snippets.

@shipilev
Last active December 28, 2016 09:51
Show Gist options
  • Save shipilev/6decf0e2b0f7d1d319fa34efeff66270 to your computer and use it in GitHub Desktop.
Save shipilev/6decf0e2b0f7d1d319fa34efeff66270 to your computer and use it in GitHub Desktop.
package org.openjdk;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLongFieldUpdater;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;
/**
* <code>
* -XX:BiasedLockingStartupDelay=0 -XX:+UseBiasedLocking
* </code>
*/
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Fork(1)
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
@Threads(1)
@State(Scope.Benchmark)
public class BiasedLockingPerfTest {
public static class Counter {
private long count = 0L;
private volatile long atomic = 0L;
static final AtomicLongFieldUpdater<Counter> UP =
AtomicLongFieldUpdater.newUpdater(Counter.class, "atomic");
public synchronized long incAndGet() {
return ++count;
}
public long incAndGet_Atomic() {
return UP.incrementAndGet(this);
}
}
Counter counter, counterWithSysIdHashCode;
@Setup
public void setup(Blackhole bh) {
counter = new Counter();
counterWithSysIdHashCode = new Counter();
bh.consume(System.identityHashCode(counterWithSysIdHashCode));
}
@Benchmark
public long sync() {
return counter.incAndGet();
}
@Benchmark
public long sync_ihc() {
return counterWithSysIdHashCode.incAndGet();
}
@Benchmark
public long atomic() {
return counter.incAndGet_Atomic();
}
@Benchmark
public long atomic_ihc() {
return counterWithSysIdHashCode.incAndGet_Atomic();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment