Last active
December 28, 2016 09:51
-
-
Save shipilev/6decf0e2b0f7d1d319fa34efeff66270 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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