zoukankan      html  css  js  c++  java
  • Kafka 内存管理类BufferPool

            基本上每个成熟的框架或者工具都有一套内存管理机制     

           BufferPool 是Kafka  用来管理内存的工具类

            BufferPool内存管理包含2个部分,已用空间+可用空间(未申请空间+已申请未使用空间) 的总和代表BufferPool的总量,用totalMemory表示(由buffer.memory配置);
    可使用的空间,它又包括两个部分:上半部分代表未申请未使用的部分,用availableMemory表示;下半部分代表已经申请但没有使用的部分,用一个ByteBuffer队列(Deque<ByteBuffer>)表示,我们称这个队列为free,队列中的ByteBuffer的大小用poolableSize表示(由batch.size配置)。
     
        所以可以得到以下2个公式
        totalMemory = 已用空间+可用空间
        可用空间 = availableMemory + free.size() * poolableSize
     
         从BufferPool中分配固定size大小的内存的步骤:

          tips:可用空间(未申请空间+已申请未使用空间)不能满足申请空间需求,需要通过释放已用空间内存来分配内存。

         内存初始化

         

       

          分配内存

          每次分配内存的时候,默认分配poolableSize大小的内存(poolableSize == batchSize)

         具体分配方案(这是源码分析,流程可以参考上面的流程图)

         

     

     

      内存释放

          

           

  • 相关阅读:
    【GoLand】分享项目到Github平台
    【Git】实用教程
    【Go】Mac系统下安装GoLand 及 环境配置
    CF 901C Bipartite Segments
    CF 811E Vladik and Entertaining Flags
    Luogu P6300 悔改
    Luogu P3943 星空
    CSP2020 | T4
    NOIP2017 | D2T3
    Luogu P6852 Mex
  • 原文地址:https://www.cnblogs.com/huxuhong/p/13651696.html
Copyright © 2011-2022 走看看