精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

看完這篇還不清楚Netty的內存管理,那我就哭了!

開發 后端
在學習Netty的時候,ByteBuf隨處可見,但是如何高效分配ByteBuf還是很復雜的,Netty的池化內存分配這塊還是比較難的,很多人學習過,看過但是還是云里霧里的,本篇文章就是主要來講解:Netty分配池化的堆外內存的細節,期待可以讓你明白?。?!

說明

在學習Netty的時候,ByteBuf隨處可見,但是如何高效分配ByteBuf還是很復雜的,Netty的池化內存分配這塊還是比較難的,很多人學習過,看過但是還是云里霧里的,本篇文章就是主要來講解:Netty分配池化的堆外內存的細節,期待可以讓你明白!!!

由于為了更好的表達,文章中的圖我最少畫了6小時,畫的不熟悉,并且也強調一些細節上。

由于該源碼中涉及到大量的二進制操作,建議看看其他二進制文章。

ByteBuf重要性

ByteBuf在Netty中一直存在,讀寫必備!ByteBuf是Netty的數據容器,高效分配ByteBuf至關重要!

看完這篇還不清楚Netty的內存管理,那我就哭了

Netty從socket讀取數據。

看完這篇還不清楚Netty的內存管理,那我就哭了

Netty準備把數據寫到socket中去。

看完這篇還不清楚Netty的內存管理,那我就哭了

通過這里我們就可以看到,再把數據寫socket的之前會判斷是否是堆外內存,如果不是會構造一個directbuffer對象的,細節代碼如下:

看完這篇還不清楚Netty的內存管理,那我就哭了


看完這篇還不清楚Netty的內存管理,那我就哭了

所以本篇文章就是主要來講解:Netty分配池化的堆外內存的細節,其實分配堆內存的細節很多也是類似的。

備注: 為什么不是堆外內存還要轉堆外內存,為什么加這個判斷,我之前也不理解,忽然有天和滌生大佬討論,討論討論就清晰了,后續有空寫篇。

看完這篇還不清楚Netty的內存管理,那我就哭了

本次主要討論的是關于池化內存的分配,PooledByteBufAllocator就是netty分配池化內存的操作入口。

其提供對外常用操作api:

看完這篇還不清楚Netty的內存管理,那我就哭了

Netty在發送數據的時候會判斷是否是堆外內存,如果不是會進行封裝的:

看完這篇還不清楚Netty的內存管理,那我就哭了

所有這里我們以分配池化的堆外內存為例,進行本文說明。池化的堆內存分配其實流程都差不多的。

下面我們來看看分配示例demo:

看完這篇還不清楚Netty的內存管理,那我就哭了

后續我們都會根據這段簡單的demo進行分析。

操作入口類

PooledByteBufAllocator的初始化:

看完這篇還不清楚Netty的內存管理,那我就哭了

進去之后可以看到核心類的一初始化操作:

看完這篇還不清楚Netty的內存管理,那我就哭了

 

 

看完這篇還不清楚Netty的內存管理,那我就哭了

 

 

 看完這篇還不清楚Netty的內存管理,那我就哭了

分配理論是jemalloc,可以理解為java版本的jemalloc實現。

PoolThreadCache

看完這篇還不清楚Netty的內存管理,那我就哭了

通過上圖可以清晰的了解到PoolThreadCache的主要數據結構。

開始的時候,這些Cache里面都是沒有值的,只有在調用free釋放的時候(在后續釋放內存中會講解),才會把之前分配的內存大小放到該cache的queue里面,其實每次分配的時候都是先看看是否緩存里面有,如果有直接返回,沒有則進行正常的分配流程(內存分配會講解)。

我們來看看PoolArena directArena內容:

看完這篇還不清楚Netty的內存管理,那我就哭了

下面我們來看看PoolArena結構。

PoolArena

看完這篇還不清楚Netty的內存管理,那我就哭了

通過下圖可以清晰的了解到PoolArena的主要數據結構。

看完這篇還不清楚Netty的內存管理,那我就哭了

在PoolArena里面涉及到PoolChunkList和PoolSubpage對應的結構有PoolChunk和PoolSubpage,我們來詳細的看看這2塊內容。

PoolChunk

第一次的時候,PoolChunkList、PoolSubpage都是默認值,需要新增一個Chunk,默認一個Chunk是16M。內部會結構是完全二叉樹一共有4096個節點,有2048個葉子節點(每個葉子節點大小為一個page,就是8k),非葉子節點的內存大小等于左子樹內存大小加上右子樹內存大小。

完全二叉樹結構如下:

看完這篇還不清楚Netty的內存管理,那我就哭了

這顆完全二叉樹在java中是使用數組來進行表示的。

唯一需要注意的是,下標是從1開始而不是0。

看完這篇還不清楚Netty的內存管理,那我就哭了

depthMap的值初始化后不再改變,memoryMap的值則隨著節點分配而改變。

看完這篇還不清楚Netty的內存管理,那我就哭了

這個值太多就不都截圖了,就是把上面那顆完全二叉樹用數組表示了而已,只是值存的不是節點的下標而是存的樹的深度而已。

depthMap數組值為0表示可以分配16M空間,如果為1 表示可以分配8M,,如果為2表示嗯可以分配4M,如果為3表示可以分配2M ……………………如果為11表示可以分配8k空間。

如果該節點已經分配完成,就設置為12即可。

怎么確定需要分配的大小在深度是多少?

如果需要分配的內存規格化之后,是小于8k,那么在8k上面分配即可(即深度為11)。

如果為8k或者大于8k那么通過下面代碼就可以定位到深度了:

  1. int d = maxOrder - (log2(normCapacity) - pageShifts); 

知道深度之后,怎么進行定位到那個節點呢???

看完這篇還不清楚Netty的內存管理,那我就哭了

找到該節點之后,先把該節點顯示占用,在更新起父節點父節點的父………………如下:

看完這篇還不清楚Netty的內存管理,那我就哭了

SubpagePool

看完這篇還不清楚Netty的內存管理,那我就哭了

上面的圖就是關于SubpagePool的內存結構了。我們在分配page的時候,根據memoryMap對于的值就知道是否被分配了,那么如果是subpagePool呢?

subpagePool分為2類:tinySubpagePools和smallSubpagePools,大小對于也對于上面的圖里面了,每類都是固定大小的,如果分配256b的大小,那么一個page就是8k,8*1024/256 = 32塊。那么怎么怎么表示每個還被分配了呢?

  1. private final long[] bitmap; 

由于一個long占用的字節數為64,我們這里僅僅是需要表示32個,所以使用一個long即可了,二進制每位 1表示已經使用了,0表示還未使用。

看完這篇還不清楚Netty的內存管理,那我就哭了

由于subpage不僅僅需要定位到完全二叉樹在那個節點,還需要知道在long的第幾個 并且是第幾位,所以要復雜一些:

看完這篇還不清楚Netty的內存管理,那我就哭了

通過一個long的前32位來表示subpage的第幾個long的第幾位上面,通過后32來表示在完全二叉樹的那個節點上面,完美。

分配核心

分配入口:ByteBuf byteBuf = alloc.directBuffer(256);

進行跟進代碼:

看完這篇還不清楚Netty的內存管理,那我就哭了

我們來看:PooledByteBuf buf = newByteBuf(maxCapacity);

構建PooledByteBuf對象。最后返回PooledByteBuf對象。

我們來看下類繼承結構:

看完這篇還不清楚Netty的內存管理,那我就哭了

所有ByteBuf byteBuf = alloc.directBuffer(256);這句話是沒有什么問題的,不會報錯。

我們來看看newByteBuf(maxCapacity)的細節實現:

看完這篇還不清楚Netty的內存管理,那我就哭了

這里借助了Netty增加實現的Recycler對象池技術。Recycler設計也非常精巧,后續可以專門寫篇Recycler文章,今天不是重點,我們只要知道由于分配PolledByteBuf對象的代價有點大,如果需要頻繁使用到PolledByteBuf對象,并且對性能有所要求,那么池化技術是一個不錯的選擇(比如我們以前使用的線程池、數據庫連接池等都是類似道理),池化技術在一定程度上面減少了頻繁創建對象帶來的性能開銷。其實這個類似的思想非常常見(比如我們查詢數據庫成本高,緩存到redis,思路也是一樣的),在本篇后續中還可以體會到(PoolThreadCache)。

通過PooledByteBuf buf = newByteBuf(maxCapacity);僅僅是獲取到了一個初始對象而已。

分配的核心在:allocate(cache, buf, reqCapacity);

看完這篇還不清楚Netty的內存管理,那我就哭了
  • 先嘗試在1步驟 進行分配,根據不同的類型定位到不同的Caches,如果有進行分配直接返回。
  • 如果1步驟 分配不了,進行2步驟上面分配。

2步驟分配細節:看看需要分配的是什么類型 page還是subpage,如果是subpage在根據看看是tinySubpagePools還是smallSubpagePools,找到對應的槽位,看看鏈表里是否有可用的PoolSubpage,如果有就進行分配修改標記退出,如果沒有就現需要在先分配一個page了,根據chunklist的這些看看是否有合適的,如果有合適的,那么在這些已經有的chunk上面進行分配一個page (分配page也是這個情況了)。

之后在根據分配到的page,進行該請求大小的分配 (由于一個page可以存儲很多同大小的數量)需要用long的位標記,表示該位置分配了,并且修改完全二叉樹的父等值,分配結束。如果沒有chunk那么需要新分配一塊chunk之后重復上面步驟即可。

釋放核心

釋放入口 :byteBuf.release();

進行跟進代碼:

看完這篇還不清楚Netty的內存管理,那我就哭了

 

看完這篇還不清楚Netty的內存管理,那我就哭了

 

看完這篇還不清楚Netty的內存管理,那我就哭了

通過這段代碼我們就這段放入到相應的queue了:

看完這篇還不清楚Netty的內存管理,那我就哭了

緩存到了對應的Cache的queue里面了。

責任編輯:華軒 來源: 匠心零度
相關推薦

2019-10-30 09:25:58

NginxApache 服務器

2023-07-13 09:05:57

react hook類型types

2023-08-07 11:07:30

5G電信TECS

2021-03-10 08:56:37

Zookeeper

2022-05-15 21:52:04

typeTypeScriptinterface

2021-07-27 07:31:16

JavaArrayList數組

2024-02-29 09:08:56

Encoding算法加密

2018-05-22 16:24:20

HashMapJavaJDK

2020-10-30 08:20:04

SD卡TF卡存儲

2022-02-18 06:56:18

Wi-Fi路由器局域網

2018-12-17 12:30:05

Kubernetes存儲存儲卷

2021-09-06 07:58:47

鏈表數據結構

2020-09-10 16:10:17

js繼承模式前端

2020-03-03 17:35:09

Full GCMinor

2025-08-18 03:25:00

2013-12-12 16:59:39

諾基亞微軟

2023-02-27 15:46:19

數據元元數據

2021-11-09 06:01:35

前端JITAOT

2022-07-29 12:29:09

CAS線程安全

2023-09-03 21:18:07

Python編程語言
點贊
收藏

51CTO技術棧公眾號

日本一本在线免费福利| 欧美 日韩 国产 一区二区三区| aa在线视频| 免费在线观看一区二区三区| 亚洲视频精品在线| 午夜免费福利视频在线观看| 福利在线导航136| 国产日韩欧美制服另类| 91成人免费看| 波多野结衣激情视频| 欧美精品三级| 一本色道久久综合亚洲精品小说| 成人黄色一区二区| 羞羞的网站在线观看| 国产调教视频一区| 成人蜜桃视频| 在线视频 中文字幕| 99精品在线观看| 欧美高清www午色夜在线视频| 日本黄色a视频| 欧美伦理影视网| 国产98色在线|日韩| 国产精品爽爽爽爽爽爽在线观看| 国产探花在线视频| 精品国产亚洲一区二区三区大结局| 亚洲人xxxx| 日韩精品另类天天更新| 日本人妻熟妇久久久久久| 久久99精品国产91久久来源| 国产成人精品亚洲精品| 国产精品白浆一区二小说| 婷婷丁香综合| 日韩在线观看成人| www.99热| 欧美日韩中字| 亚洲欧美制服丝袜| 日本护士做爰视频| 在线日韩成人| 日韩欧美在线观看一区二区三区| 日日摸日日碰夜夜爽无码| 国产写真视频在线观看| 国产精品欧美久久久久无广告| 91久久中文字幕| 一女二男一黄一片| 免费成人av在线| 久久免费成人精品视频| 久久久久无码国产精品不卡| 真实国产乱子伦精品一区二区三区| 精品日韩成人av| 91精品人妻一区二区三区蜜桃2 | 99re视频这里只有精品| 国产精品美女黄网| 好吊视频一二三区| 欧美a级理论片| 国产精品99蜜臀久久不卡二区| 欧美另类视频在线观看| 欧美黄色一区| 欧美高清一级大片| 国产精品999久久久| 亚洲成人直播| 国产91精品久| 私库av在线播放| 国精一区二区| 中文字幕av一区中文字幕天堂| av电影在线播放| 加勒比色老久久爱综合网| 亚洲护士老师的毛茸茸最新章节| 亚洲视频在线不卡| 我要色综合中文字幕| 亚洲成人精品av| 99精品999| **爰片久久毛片| 精品视频偷偷看在线观看| 欧美老熟妇乱大交xxxxx| 成人黄色小视频| 精品国内亚洲在观看18黄| av黄色免费网站| 欧美sss在线视频| 一区二区欧美在线| 久久高清内射无套| 91不卡在线观看| 欧美激情国内偷拍| 曰本女人与公拘交酡| 亚洲美女黄色| 国产精品视频精品| 成人毛片在线精品国产| 久久久久久影视| 最新视频 - x88av| 多野结衣av一区| 欧美伊人久久大香线蕉综合69 | 欧美freesex黑人又粗又大| 色综合久久久久综合| 911福利视频| 老司机成人在线| 综合欧美国产视频二区| 久久久国产精品黄毛片| 先锋影音久久| 91精品久久久久久蜜桃| 欧美亚洲日本| 亚洲夂夂婷婷色拍ww47| 日本wwwcom| 国产精品麻豆成人av电影艾秋| 欧美在线观看视频在线| 国产情侣久久久久aⅴ免费| 8848成人影院| 在线视频日韩精品| 日韩毛片在线播放| 狠狠色狠狠色综合系列| 欧洲av一区| 在线看的av网站| 精品magnet| 免费人成视频在线播放| 国产剧情一区| 午夜精品福利在线观看| 国产免费观看av| 国产一区二区三区蝌蚪| 国产传媒一区二区| 黄视频网站在线看| 欧美午夜寂寞影院| 超碰在线超碰在线| 日韩精品网站| 国产91在线播放九色快色| 天天爽夜夜爽夜夜爽| 亚洲视频免费看| 91人人澡人人爽人人精品| 96sao精品免费视频观看| 亚洲欧美999| 天堂网一区二区三区| 国产成人精品综合在线观看| 国产在线拍揄自揄拍无码| 国产精品久久亚洲不卡| 亚洲男子天堂网| 亚洲GV成人无码久久精品 | 北条麻妃在线一区| 老牛精品亚洲成av人片| 性欧美视频videos6一9| 亚洲毛片欧洲毛片国产一品色| 久久影音资源网| 18禁男女爽爽爽午夜网站免费| 成人黄页网站视频| 亚洲人成在线观看| 五月天婷婷导航| 国产日韩欧美一区二区三区综合| 国产一区一区三区| 欧美13videosex性极品| 5858s免费视频成人| 中文字幕一区三区久久女搜查官| 成人羞羞网站| 国产精品亚洲аv天堂网| av资源网在线观看| 欧美三级视频在线播放| 我想看黄色大片| 奇米精品一区二区三区四区 | 亚洲精品一级片| 一区二区三区在线免费观看| 亚洲成人福利视频| 清纯唯美亚洲综合一区| 国产精品精品视频| 1pondo在线播放免费| 激情成人中文字幕| 亚洲av网址在线| 午夜久久美女| 国产区欧美区日韩区| 色一区二区三区| 亚洲免费视频观看| 国产情侣呻吟对白高潮| 亚洲欧洲日韩女同| 熟妇高潮一区二区| 美女爽到呻吟久久久久| 亚洲欧洲精品一区二区三区波多野1战4| av资源一区| 日韩av中文字幕在线免费观看| 成人在线观看小视频| 国产91丝袜在线播放0| 日本中文字幕亚洲| 精品日韩在线| 成人性生交大片免费看视频直播 | 66精品视频在线观看| 91av视频在线播放| 日本激情一区二区三区| 色婷婷国产精品| 精品国产国产综合精品| 日本va欧美va瓶| 国产视频在线观看网站| 日韩成人在线观看视频| 91精品国产九九九久久久亚洲| 欧美少妇bbw| 在线看不卡av| www.99热| 成人免费视频视频在线观看免费| 大荫蒂性生交片| 亚洲欧美校园春色| 成人欧美一区二区三区在线| 成人勉费视频| 久久99精品国产99久久6尤物| www.色婷婷.com| 色婷婷久久久综合中文字幕| 黄色一级片中国| 久久久久久久久久久99999| 日韩欧美中文视频| 视频在线观看91| 色吧亚洲视频| 精品欠久久久中文字幕加勒比| 97视频在线观看免费高清完整版在线观看| 亚洲成人77777| 在线观看91精品国产入口| 免费一级片在线观看| 久久久久久免费| aaa黄色大片| 极品销魂美女一区二区三区| 91黄色小网站| 四季av在线一区二区三区 | 国产成人无码精品亚洲 | 免费日本黄色网址| 精品综合久久久久久8888| 免费观看日韩毛片| 欧美日韩亚洲一区二区三区在线| 韩国精品一区二区三区六区色诱| 午夜激情电影在线播放| 九九热这里只有在线精品视| av在线播放网| 亚洲精品资源美女情侣酒店| 欧美一级特黄aaaaaa大片在线观看| 精品久久久久久中文字幕一区奶水 | 中文字幕在线视频久| 欧美日本精品在线| 日本大片在线观看| 精品久久人人做人人爱| av加勒比在线| 91精品国产91久久久久久最新毛片| 国产一级特黄a高潮片| 亚洲欧美日韩国产成人精品影院 | 欧美日韩黄色| 川上优av一区二区线观看 | 欧美高清视频在线| 国产黄a三级三级三级av在线看| 亚洲成人精品视频| 午夜老司机福利| 日韩精品一区二区三区中文精品| 亚洲黄色免费观看| 岛国av午夜精品| 日韩欧美激情视频| 天天爽夜夜爽夜夜爽精品视频| 又色又爽的视频| 9l国产精品久久久久麻豆| 91视频在线免费| 99精品视频一区二区三区| 免费看黄色aaaaaa 片| 97精品国产露脸对白| 熟女人妻在线视频| 久久亚洲精精品中文字幕早川悠里| 在线a免费观看| 国产成人综合亚洲网站| 在线视频日韩一区| 免费成人在线视频观看| 六月丁香婷婷激情| 日韩电影免费一区| 亚洲欧美aaa| 高清国产一区二区| 久久久久国产精品区片区无码| 国产精品小仙女| 国产xxxx视频| 久久亚洲捆绑美女| 五月天婷婷丁香网| 一区二区三区久久久| 自拍偷拍欧美亚洲| 欧美性受极品xxxx喷水| 国产露脸91国语对白| 精品成人免费观看| 欧美大片aaa| 久久视频在线看| 色的视频在线免费看| 亚洲欧美国产精品久久久久久久| 亚洲乱码精品久久久久..| 日韩h在线观看| 五月婷婷在线观看| 久久久久久久国产精品视频| 欧美gay视频| 91色精品视频在线| 免费看久久久| 成人欧美视频在线| 香蕉人人精品| 综合视频在线观看| 亚洲精品韩国| 污污网站在线观看视频| 99精品视频在线观看| 亚洲国产精品自拍视频| 国产精品女同一区二区三区| 玖玖爱免费视频| 91福利视频久久久久| 国产成人精品一区二三区四区五区 | 成人高潮a毛片免费观看网站| 99久久自偷自偷国产精品不卡| 亚洲男女网站| 久久精品丝袜高跟鞋| 亚洲91精品| 国产精品少妇在线视频| 国产精品一区二区久久精品爱涩 | 欧美老女人xx| 欧美××××黑人××性爽| 99国产视频在线| 青青草国产免费一区二区下载 | 亚洲激情另类| 超碰成人在线播放| 久久嫩草精品久久久精品一| 久久综合加勒比| 欧美日韩精品一区二区三区 | 亚洲精品国产福利| 日本三级视频在线播放| 欧洲亚洲在线视频| www.豆豆成人网.com| 日韩最新中文字幕| 日韩av一区二| 四虎永久免费影院| 中文字幕不卡的av| 依依成人综合网| 亚洲精品一区二区三区蜜桃下载 | 日韩欧美中文在线观看| 午夜欧美性电影| 久久精品人人做人人爽电影蜜月| 超碰超碰在线观看| 久久久久久久精| 成人毛片18女人毛片| 精品国精品国产尤物美女| 久cao在线| 成人网在线观看| 小小影院久久| 成年网站免费在线观看| 中文无字幕一区二区三区| 欧美黄色一级大片| 亚洲热线99精品视频| 国产免费不卡| 免费在线成人av| 午夜亚洲视频| 乳色吐息在线观看| 亚洲码国产岛国毛片在线| 91精品国自产| 亚洲精品www久久久| 麻豆传媒在线免费看| 国产精品一区=区| 久久美女视频| 中文字幕在线视频精品| 亚洲视频在线一区| 国产三级自拍视频| 欧美刺激性大交免费视频| 欧美一级二级视频| 亚洲国产午夜伦理片大全在线观看网站| 欧美日韩一区二区国产| 久久久久久久久久影视| 亚洲成在人线在线播放| 少妇一区二区三区四区| 91大神福利视频在线| 久久av超碰| 在线免费视频a| 中文字幕一区二区不卡| 波多野结衣啪啪| 原创国产精品91| 亚洲成人高清| 日韩一区二区三区资源| 亚洲精品1区2区| 黄色性生活一级片| 欧美性大战久久久久久久蜜臀 | 91麻豆国产香蕉久久精品| 久久久久久久久久成人| 中文字幕亚洲综合久久| 亚洲三级电影| 欧美又粗又长又爽做受| 黄页网站大全一区二区| 久久久久噜噜噜亚洲熟女综合| 欧美一区二区高清| 欧美亚洲日本精品| 五月天丁香综合久久国产 | 欧美天堂在线视频| 欧美中文字幕在线观看| 91一区二区三区四区| www.四虎精品| 在线观看视频91| 丝袜在线视频| 日本一区二区三区www| 国产美女精品一区二区三区| 日韩视频免费观看高清| 中文字幕日韩av| 国产精品蜜月aⅴ在线| av在线观看地址| 欧美国产激情二区三区| 成人av手机在线| 国产成一区二区| 国产一区二区三区自拍| 国产精成人品免费观看| 欧美xingq一区二区| 欧美三级网址| 日韩a级黄色片| 国产精品免费丝袜| 男人天堂综合网| 91精品久久久久久久久久久久久久| 精品国产乱码久久久| 日本少妇xxxx软件| 性久久久久久久| 国产写真视频在线观看| 欧美极品一区|