美文网首页
Netty内存申请(简)

Netty内存申请(简)

作者: 赵信信官属 | 来源:发表于2022-03-11 04:59 被阅读0次

样例代码


import io.netty.buffer.ByteBuf;
import io.netty.buffer.PooledByteBufAllocator;

public class Example {

    public static void main(String[] args) {

        PooledByteBufAllocator allocator = PooledByteBufAllocator.DEFAULT;

        ByteBuf byteBuf1 = allocator.directBuffer(16 * 1024);
        ByteBuf byteBuf2 = allocator.directBuffer(16 * 1024);

    }
}

解读以上代码

Netty默认一次性会向操作系统申请16M的内存(虚拟地址空间), 使用Java的直接内存, 使用DirectByteBuffer对象来表达这块16M内存.

16M直接内存

如上图, 这块内存的起始地址address=481333312, 容量capatity=16777216字节=16M

紧接着分配16KB内存

ByteBuf byteBuf1 = allocator.directBuffer(16 * 1024);

以上代码申请16KB的内存, 由于Netty已经申请了16M的内存, 就从这16M内存中分配16KB的内存出来,申请后的16KB内存使用以下PooledUnsafeDirectByteBuf对象表示

分配16KB内存

如上图, 这块16KB的起始地址memoryAddress=481333312, 偏移量offset=0, 长度length=16384字节=16KB, 用形象的图表示如下

从16M内存中分配16KB

紧接着,又需要分配16KB内存

ByteBuf byteBuf2 = allocator.directBuffer(16 * 1024);

申请后的16KB内存使用以下PooledUnsafeDirectByteBuf对象表示

再次分配16KB内存

如上图, 这块内存的起始地址变成了memoryAddress=481349696, 偏移量offset=16384,大小length=16384.
之所以它的起始地址是481349696, 是因为这块16KB的内存是在上一个16KB的内存基础上紧挨着分配的, 16M的起始地址=481333312, 上一个分配的16KB的大小=16384, 所以481333312+16384正好等于481349696, 用形象的图表示如下

2块16KB内存分配情况

相关文章

  • Netty内存申请(简)

    样例代码 解读以上代码 Netty默认一次性会向操作系统申请16M的内存(虚拟地址空间), 使用Java的直接内存...

  • netty源码分析--PoolByteBufAllocator

    1.Netty内存分配基础数据结构 Netty会提前申请一块连续的内存(用PoolArena类)表示,然后每一个P...

  • CMS,堆外内存,System.gc(),堆外内存

    类似netty的directBuffer,在堆外申请一块内存,在堆内有一个相应的reference对象,堆外内存的...

  • netty内存分析

    netty内存规格 netty内存分配器类图如下 我们直接看io.netty.buffer.PooledByteB...

  • Netty内存池之PoolChunk原理详解

    PoolChunk是Netty内存池中的重要组成部分,其作用主要在于维护了一个较大的内存块,当需要申请超过8KB的...

  • Netty之ByteBuf深入分析

    netty中的PlatformDependent Netty之ByteBuf深入分析[TOC]分析思路内存与内存管...

  • PooledByteBufAllocator介绍

    Netty自己实现了内存分配,把内存分配抽象出来形成了一个独立部分。Netty的内存分配借鉴了jemalloc内存...

  • Netty 内存分配之PoolChunk

    本文基于Netty 4.1.6.Final版本 在程序运行过程中,内存的申请和回收是非常频繁的操作。所以在这个过程...

  • 每周阅读(7/25)

    追踪 Netty 异常占用堆外内存的经验分享LeanCloud团队关于Netty堆外内存泄漏的调查 MongoDB...

  • PoolChunk

    分配算法描述 总述 概念 Netty中,PoolChunk实际上就代表了一次申请的内存空间,借助池的设计,达到多次...

网友评论

      本文标题:Netty内存申请(简)

      本文链接:https://www.haomeiwen.com/subject/qyccdrtx.html