Home / Class/ RecyclerBenchmark Class — netty Architecture

RecyclerBenchmark Class — netty Architecture

Architecture documentation for the RecyclerBenchmark class in RecyclerBenchmark.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  f3ce3bf7_0aec_591c_d35b_cfe2adfbfa83["RecyclerBenchmark"]
  7aaaabe7_71e7_6b45_0baa_7e060ebdcd2a["RecyclerBenchmark.java"]
  f3ce3bf7_0aec_591c_d35b_cfe2adfbfa83 -->|defined in| 7aaaabe7_71e7_6b45_0baa_7e060ebdcd2a
  9d21f9ae_4950_b70f_e0c0_6404d5448ab4["ChainedOptionsBuilder()"]
  f3ce3bf7_0aec_591c_d35b_cfe2adfbfa83 -->|method| 9d21f9ae_4950_b70f_e0c0_6404d5448ab4
  2234e33c_0edd_cfa3_e816_d9428977c91c["DummyObject()"]
  f3ce3bf7_0aec_591c_d35b_cfe2adfbfa83 -->|method| 2234e33c_0edd_cfa3_e816_d9428977c91c
  c2a84a22_a2ff_b27c_f8fa_aa2b05998a09["producer()"]
  f3ce3bf7_0aec_591c_d35b_cfe2adfbfa83 -->|method| c2a84a22_a2ff_b27c_f8fa_aa2b05998a09
  f18b7e9e_82f1_c032_3601_48d2e21b42b0["consumer()"]
  f3ce3bf7_0aec_591c_d35b_cfe2adfbfa83 -->|method| f18b7e9e_82f1_c032_3601_48d2e21b42b0
  cff6de66_2c7b_9406_2199_7defd7c72fb5["unguardedProducer()"]
  f3ce3bf7_0aec_591c_d35b_cfe2adfbfa83 -->|method| cff6de66_2c7b_9406_2199_7defd7c72fb5
  171be599_1829_92d8_b922_2348e5ff6644["unguardedConsumer()"]
  f3ce3bf7_0aec_591c_d35b_cfe2adfbfa83 -->|method| 171be599_1829_92d8_b922_2348e5ff6644

Relationship Graph

Source Code

microbench/src/main/java/io/netty/microbench/util/RecyclerBenchmark.java lines 42–220

@Warmup(iterations = AbstractMicrobenchmarkBase.DEFAULT_WARMUP_ITERATIONS, time = 1)
@Measurement(iterations = AbstractMicrobenchmarkBase.DEFAULT_MEASURE_ITERATIONS, time = 1)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class RecyclerBenchmark extends AbstractMicrobenchmark {

    @Override
    protected ChainedOptionsBuilder newOptionsBuilder() throws Exception {
        return super.newOptionsBuilder().addProfiler("gc");
    }

    @Benchmark
    public DummyObject plainNew() {
        return new DummyObject();
    }

    @Benchmark
    public DummyObject recyclerGetAndOrphan(ProducerConsumerState state) {
        return state.recycler.get();
    }

    @Benchmark
    public DummyObject recyclerGetAndRecycle(ProducerConsumerState state) {
        DummyObject o = state.recycler.get();
        o.recycle();
        return o;
    }

    @Benchmark
    public DummyObject recyclerGetAndUnguardedRecycle(ProducerConsumerState state) {
        DummyObject o = state.recycler.get();
        o.unguardedRecycle();
        return o;
    }

    @State(Scope.Benchmark)
    public static class ProducerConsumerState {

        @Param({ "false", "true" })
        boolean unguarded;

        @Param({ "false", "true" })
        boolean fastThreadLocal;

        Queue<DummyObject> queue;

        Recycler<DummyObject> recycler;

        @Setup
        public void init(BenchmarkParams params) {
            if (params.getBenchmark().endsWith("roducerConsumer")) {
                final int threads = params.getThreads();
                if (threads != 2) {
                    throw new IllegalStateException("ProducerConsumerState only supports exactly 2 threads");
                }
            }
            queue = PlatformDependent.hasUnsafe()?
                    new SpscArrayQueue<>(100) : new SpscAtomicArrayQueue<>(100);
            recycler = !fastThreadLocal?
                    new Recycler<DummyObject>(Thread.currentThread(), unguarded) {
                        @Override
                        protected DummyObject newObject(Recycler.Handle<DummyObject> handle) {
                            return new DummyObject((EnhancedHandle<DummyObject>) handle);
                        }
                    } :
                    new Recycler<DummyObject>(unguarded) {
                        @Override
                        protected DummyObject newObject(Recycler.Handle<DummyObject> handle) {
                            return new DummyObject((EnhancedHandle<DummyObject>) handle);
                        }
                    };
        }
    }

    @AuxCounters
    @State(Scope.Thread)
    public static class ProducerStats {
        public long fullQ;
    }

    // The allocation stats are the main thing interesting about this benchmark

Frequently Asked Questions

What is the RecyclerBenchmark class?
RecyclerBenchmark is a class in the netty codebase, defined in microbench/src/main/java/io/netty/microbench/util/RecyclerBenchmark.java.
Where is RecyclerBenchmark defined?
RecyclerBenchmark is defined in microbench/src/main/java/io/netty/microbench/util/RecyclerBenchmark.java at line 42.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free