DefaultHandle Class — netty Architecture
Architecture documentation for the DefaultHandle class in Recycler.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 892e9793_976b_14af_cfdd_de6349d8b941["DefaultHandle"] 92da7dba_a9f6_c802_c3c1_5a54e228e444["Recycler.java"] 892e9793_976b_14af_cfdd_de6349d8b941 -->|defined in| 92da7dba_a9f6_c802_c3c1_5a54e228e444 6be36837_1bc7_fab5_7adb_215b2b9129e3["DefaultHandle()"] 892e9793_976b_14af_cfdd_de6349d8b941 -->|method| 6be36837_1bc7_fab5_7adb_215b2b9129e3 1643de33_e9da_0b4c_a298_9df95940fc8a["recycle()"] 892e9793_976b_14af_cfdd_de6349d8b941 -->|method| 1643de33_e9da_0b4c_a298_9df95940fc8a 27b6de6e_40cd_477c_35e4_5d488668cbb6["unguardedRecycle()"] 892e9793_976b_14af_cfdd_de6349d8b941 -->|method| 27b6de6e_40cd_477c_35e4_5d488668cbb6 7208b125_d288_47f9_2cc7_97067cd070ef["T()"] 892e9793_976b_14af_cfdd_de6349d8b941 -->|method| 7208b125_d288_47f9_2cc7_97067cd070ef e857bec0_9fb3_d348_0a0e_2c57478ccec0["set()"] 892e9793_976b_14af_cfdd_de6349d8b941 -->|method| e857bec0_9fb3_d348_0a0e_2c57478ccec0 6dad0133_9af2_f8e9_e553_e2104e2e48c2["toAvailable()"] 892e9793_976b_14af_cfdd_de6349d8b941 -->|method| 6dad0133_9af2_f8e9_e553_e2104e2e48c2 a7837d50_9ce6_c313_2d40_bcc734557d3d["unguardedToAvailable()"] 892e9793_976b_14af_cfdd_de6349d8b941 -->|method| a7837d50_9ce6_c313_2d40_bcc734557d3d
Relationship Graph
Source Code
common/src/main/java/io/netty/util/Recycler.java lines 377–437
private static final class DefaultHandle<T> extends EnhancedHandle<T> {
private static final int STATE_CLAIMED = 0;
private static final int STATE_AVAILABLE = 1;
private static final AtomicIntegerFieldUpdater<DefaultHandle<?>> STATE_UPDATER;
static {
AtomicIntegerFieldUpdater<?> updater = AtomicIntegerFieldUpdater.newUpdater(DefaultHandle.class, "state");
//noinspection unchecked
STATE_UPDATER = (AtomicIntegerFieldUpdater<DefaultHandle<?>>) updater;
}
private volatile int state; // State is initialised to STATE_CLAIMED (aka. 0) so they can be released.
private final GuardedLocalPool<T> localPool;
private T value;
DefaultHandle(GuardedLocalPool<T> localPool) {
this.localPool = localPool;
}
@Override
public void recycle(Object object) {
if (object != value) {
throw new IllegalArgumentException("object does not belong to handle");
}
toAvailable();
localPool.release(this);
}
@Override
public void unguardedRecycle(Object object) {
if (object != value) {
throw new IllegalArgumentException("object does not belong to handle");
}
unguardedToAvailable();
localPool.release(this);
}
T claim() {
assert state == STATE_AVAILABLE;
STATE_UPDATER.lazySet(this, STATE_CLAIMED);
return value;
}
void set(T value) {
this.value = value;
}
private void toAvailable() {
int prev = STATE_UPDATER.getAndSet(this, STATE_AVAILABLE);
if (prev == STATE_AVAILABLE) {
throw new IllegalStateException("Object has been recycled already.");
}
}
private void unguardedToAvailable() {
int prev = state;
if (prev == STATE_AVAILABLE) {
throw new IllegalStateException("Object has been recycled already.");
}
STATE_UPDATER.lazySet(this, STATE_AVAILABLE);
}
}
Source
Frequently Asked Questions
What is the DefaultHandle class?
DefaultHandle is a class in the netty codebase, defined in common/src/main/java/io/netty/util/Recycler.java.
Where is DefaultHandle defined?
DefaultHandle is defined in common/src/main/java/io/netty/util/Recycler.java at line 377.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free