Mercurial > hg > gc-bench
view src/main/java/org/openjdk/gcbench/fragger/CHMFragger.java @ 81:c1b1811b7730
Fragger updates
author | shade |
---|---|
date | Thu, 26 Oct 2017 12:09:35 +0200 |
parents | a2da92eb9aa9 |
children | 583fef4276f5 |
line wrap: on
line source
package org.openjdk.gcbench.fragger; import org.openjdk.jmh.annotations.*; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; @Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Fork(value = 1) @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) @Threads(1) @State(Scope.Benchmark) public class CHMFragger { static final int PAYLOAD_SIZE = 4096; @Param({"1000"}) int size; Object[] keys; Map<Object, Object> cache; @Setup public void setup() { keys = new Object[size]; cache = new ConcurrentHashMap<>(); for (int c = 0; c < size; c++) { Object k = new Object(); keys[c] = k; cache.put(k, new byte[PAYLOAD_SIZE]); } } @Benchmark public Object test() { ThreadLocalRandom tlr = ThreadLocalRandom.current(); int idx = tlr.nextInt(size); if (tlr.nextInt(5) == 0) { Object pk = keys[idx]; Object nk = new Object(); byte[] v = new byte[PAYLOAD_SIZE]; cache.put(nk, v); cache.remove(pk); keys[idx] = nk; return v; } else { return cache.get(keys[idx]); } } }