首页  

netty ByteBuf 种类     所属分类 netty 浏览量 92
池化与非池化:
Pooled:池化的 ByteBuf,使用内存池来管理内存,适用于高并发场景,可以减少内存分配和回收的开销。
Unpooled:非池化的 ByteBuf,不使用内存池,直接从堆内存或直接内存中分配内存,适用于低并发或内存需求不高的场景。

堆内存与直接内存:
Heap:堆内存的 ByteBuf,数据存储在JVM的堆空间中,通过数组实现。
Direct:直接内存的 ByteBuf,数据存储在操作系统的堆外内存中,不依赖于JVM的垃圾回收机制,适用于需要高性能的场景。


安全与非安全:
Safe:安全的 ByteBuf,提供了对内存操作的保护,防止非法访问。
Unsafe:非安全的 ByteBuf,直接操作内存,性能较高,但需要小心使用,避免非法访问导致的内存问题。


ByteBuf byteBuf = ByteBufAllocator.DEFAULT.buffer(10);

ByteBuf byteBuf = Unpooled.buffer(10);


public final class Unpooled {
    private static final ByteBufAllocator ALLOC;

    static {
        ALLOC = UnpooledByteBufAllocator.DEFAULT;
    }

    public static ByteBuf buffer(int initialCapacity) {
        return ALLOC.heapBuffer(initialCapacity);
    }

    public static ByteBuf directBuffer() {
        return ALLOC.directBuffer();
    }
}


public interface ByteBufAllocator {
    ByteBufAllocator DEFAULT = ByteBufUtil.DEFAULT_ALLOCATOR;
...
}


public final class ByteBufUtil {
    static final ByteBufAllocator DEFAULT_ALLOCATOR;
    static {
        //1.分配类型
        String allocType = SystemPropertyUtil.get("io.netty.allocator.type", PlatformDependent.isAndroid() ? "unpooled" : "pooled");

        //2.根据类型,创建不同的分配器
        Object alloc;
        if ("unpooled".equals(allocType)) {
            alloc = UnpooledByteBufAllocator.DEFAULT;

        } else if ("pooled".equals(allocType)) {
            alloc = PooledByteBufAllocator.DEFAULT;

        } else {
            alloc = PooledByteBufAllocator.DEFAULT;
        }

        DEFAULT_ALLOCATOR = (ByteBufAllocator)alloc;
    }
}


池化 + 堆内存,PooledHeapByteBuf; 池化 + 直接内存,PooledDirectByteBuf; 池化 + 堆内存 + 不安全,PooledUnsafeHeapByteBuf; 池化 + 直接内存 + 不安全,PooledUnsafeDirectByteBuf; 非池化 + 堆内存,UnpooledHeapByteBuf; 非池化 + 直接内存,UnpooledDirectByteBuf; 非池化 + 堆内存 + 不安全,UnpooledUnsafeHeapByteBuf; 非池化 + 直接内存 + 不安全,UnpooledUnsafeDirectByteBuf PooledDirectByteBuf 堆外内存 PooledHeapByteBuf 堆内内存 PooledUnsafeDirectByteBuf 不安全的堆外内存 public static final PooledByteBufAllocator DEFAULT = new PooledByteBufAllocator(PlatformDependent.directBufferPreferred()); PooledByteBuf< T> extends AbstractReferenceCountedByteBuf extends AbstractByteBuf extends ByteBuf public abstract class ByteBuf implements ReferenceCounted, Comparable< ByteBuf>

上一篇     下一篇
MQTT协议总结

小学数学学习资料收集

netty学习资料汇总

netty ByteToMessageDecoder

netty解码器实例

Netty EventLoop