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
Source
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