教育类网站建设策划书,wordpress网页内容,标志设计理念,十个源码网站一、规格化
内存池类似于一个内存零售商, 从操作系统中申请一整块内存, 然后对其进行合理分割, 将分割后的小内存返回给程序。这里存在3个尺寸:
分割尺寸: 底层内存管理的基本单位, 比如常见的以页为单位分配, 但是页的大小是灵活的;申请尺寸: 内存使用者希望申请到的内存大小…一、规格化
内存池类似于一个内存零售商, 从操作系统中申请一整块内存, 然后对其进行合理分割, 将分割后的小内存返回给程序。这里存在3个尺寸:
分割尺寸: 底层内存管理的基本单位, 比如常见的以页为单位分配, 但是页的大小是灵活的;申请尺寸: 内存使用者希望申请到的内存大小;分配尺寸: 内存池实际分配的内存大小, 存在该尺寸的原因是分配尺寸申请尺寸; 总结来说, 内存规格化就是确定有哪些尺寸的内存, 针对不同的申请尺寸提供对应的分配尺寸。
二、规格化描述7元组
每一种尺寸使用下面的7元组表示| 元组字段以及含义如下
name代码注释个人理解indexSize class index从0开始的索引log2GroupLog of group base size (no deltas added)尺寸分组的baselog2DeltaLog of delta to previous size class分组内的增量单位nDeltaDelta multiplier分组内增量单位的倍数isMultiPageSize‘yes’ if a multiple of the page size ‘no’ otherwise是否为Page的整倍数isSubPage‘yes’ if a subpage size class ‘no’ otherwise.是否可能为SubPagelog2DeltaLookupSame as log2Delta if a lookup table size class ‘no’ otherwise.代码中没有使用
三、规格化结果
indexlog2Grouplog2DeltanDeltaisMultiPageSizeisSubPagelog2DeltaLookupsize04400141614410143224420144834430146446410148056420149666430141127644014128875101516097520151921075301522411754015256128610163201386201638414863016448158640165121697101764017972017768189730178961997401710242010810181280211082018153622108301817922310840182048241191019256025119201930722611930193584271194019409628121010105120291210201061443012103010716831121041108192321311101010240331311201012288341311301014336351311411016384361412101020480371412211024576381412301028672391412410032768401513110040960411513210049152421513310057344431513410065536441614110081920451614210098304461614310011468847161441001310724817151100163840491715210019660850171531002293765117154100262144521816110032768053181621003932165418163100458752551816410052428856191711006553605719172100786432581917310091750459191741001048576602018110013107206120182100157286462201831001835008632018410020971526421191100262144065211921003145728662119310036700166721194100419430468222011005242880692220210062914567022203100734003271222041008388608722321110010485760732321210012582912742321310014680064752321410016777216
四、相关计算公式
a. 每个内存规格的尺寸计算公式 size (1 log2Group) (1 log2Delta) * nDelta; b. 第0组是单独初始化不予考虑, 从第1组开始 log2Group log2Delta 2; c. 通过a,b合并得到 size 2 ^ log2Delta (4 nDelta) d. 从c得到, 自第1组开始组内每个内存大小是logDelta的[ 5,6,7,8 ]倍;
五、结果说明
最小尺寸16B, 最大尺寸16M;尺寸分19组, 每组4个, 共76种尺寸(规格, 颗粒度);从第1组开始, 后一组是前一组容量的2倍;组内后一个是在前一个的尺寸基础上log2Delta;尺寸pageSize(8K)的有40个;尺寸小于pageSize(8K)的有36个;这种尺寸作为分配的最小颗粒度, 同时也影响了做实际分配时的空间大小以及对应的最小颗粒度(元素)数量;
六、小结
本篇介绍的是Netty4.1.73-Final的内存规格化, 后续的内存分配均以该内存规格为基础进行。整个尺寸要覆盖小尺寸和大尺寸, 平衡分配效率和空间利用率。这里仅仅介绍了其内存规格化的实现结果, 如此设计的原因和历史的演进, 感兴趣的小伙伴可以去进一步研究Jmelloc项目。