import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.util.ArrayDeque;
import java.util.concurrent.TimeUnit;
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@Warmup(iterations = 3, time = 10)
@Measurement(iterations = 5, time = 10)
public class ListBenchmark {
private EvictingRingList<Integer> ringList;
private ArrayDeque<Integer> arrayDeque;
ringList = new EvictingRingList<>(capacity);
arrayDeque = new ArrayDeque<>(capacity);
Random random = new Random(42);
for (int i = 0; i < 1000; i++) {
indices[i] = random.nextInt(capacity);
for (int i = 0; i < capacity; i++) {
public void testAdd(Blackhole bh) {
public void testArrayDequeAddManualEvict(Blackhole bh) {
if (arrayDeque.size() >= capacity) {
arrayDeque.removeFirst();