Netty源码分析:PooledByteBufAllocator

Netty源码分析:PooledByteBufAllocator

无论是我们使用语句ByteBuf byteBuf = Unpooled.buffer(256);来分配buf,还是使用如下的语句来分配Buf:

        PooledByteBufAllocator allocator = new PooledByteBufAllocator(false);
        ByteBuf byteBuf = allocator.heapBuffer(15);

都是使用了 PooledByteBufAllocator 这个类类分配Buf。因此就来分析下这个类。

1、常量的说明

    public class PooledByteBufAllocator extends AbstractByteBufAllocator {
   

        private static final InternalLogger logger = InternalLoggerFactory.getInstance(PooledByteBufAllocator.class);
        //默认的PoolArena个数,堆内存类型
        private static final int DEFAULT_NUM_HEAP_ARENA;
        //默认的PoolArena个数,直接内存类型
        private static final int DEFAULT_NUM_DIRECT_ARENA;
        //默认的Page的个数,最小为4K,默认为8K
        private static final int DEFAULT_PAGE_SIZE;
        /*
        由于每个chunk中的page是用平衡二叉树映射管理每个PoolSubpage是否被分配,
        maxOrder为树的深度,深度为maxOrder层的节点数量为 1 << maxOrder。
        */
        private static final int DEFAULT_MAX_ORDER; //默认为 11        //默认的tiny cache 的大小
        private static final int DEFAULT_TINY_CACHE_SIZE; //512
        //默认的small cache的大小
        private static final int DEFAULT_SMALL_CACHE_SIZE;// 256
        //默认的normal cache的大小
        private static final int DEFAULT_NORMAL_CACHE_SIZE;//64
        private static final int DEFAULT_MAX_CACHED_BUFFER_CAPACITY;
        private static final int DEFAULT_CACHE_TRIM_INTERVAL;
        //page容量的最小值,为4K。
        private static final int MIN_PAGE_SIZE = 4096;
        //最大chunk的大小,等于2的30次方,即1G。
        private static final int MAX_CHUNK_SIZE = (int) (((long) Integer.MAX_VALUE + 1) / 2);

以上这些常量除了最后两个都是在如下的static块中进行初始化。

    static {
        int defaultPageSize = SystemPropertyUtil.getInt("io.netty.allocator.pageSize", 8192);
        Throwable pageSizeFallbackCause = null;
        try {
            validateAndCalculatePageShifts(defaultPageSize);
        } catch (Throwable t) {
            pageSizeFallbackCause = t;
            defaultPageSize = 8192;
        }
        DEFAULT_PAGE_SIZE = defaultPageSize;

        int defaultMaxOrder = SystemPropertyUtil.getInt("io.netty.allocator.maxOrder", 11);
        Throwable maxOrderFallbackCause = null;
        try {
            validateAndCalculateChunkSize(DEFAULT_PAGE_SIZE, defaultMaxOrder);
       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值