Home / Class/ DefaultHandle Class — netty Architecture

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);
        }
    }

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