netty內(nèi)存池

1:PooledByteBufAllocator ? ?內(nèi)存池入口,應用通過該類從內(nèi)存池中申請內(nèi)存

PoolThreadCache:線程緩存池

Recycler:上文的Recycler是個對象池,儲存的是相應類型的堆中對象的集合。

2:PooledByteBufAllocator獲取bytebuf步驟:

? ? ? 1)如果是pool類型,先在線程對象池中獲取一個相應類型的poolBuffer對象,這個對象是在堆中的,也是返回的對象,然后會使用PoolThreadCache這個線程內(nèi)存池,獲取一塊合適大小的內(nèi)存。接下來根據(jù)這塊內(nèi)存的信息對這個poolBuffer對象進行init,比如設置內(nèi)存的address,length等,用戶就可以通過這個buffer對象對相應的內(nèi)存進行操作。

? ? ? 2)注意區(qū)別線程對象池和線程內(nèi)存池。線程對象池指同一類型的對象集合,用戶也只能通過對象來進行操作,比如讀寫數(shù)據(jù)。而線程內(nèi)存池是許多內(nèi)存塊的集合,用戶通過對象讀寫數(shù)據(jù)還是要定位到實際的內(nèi)存地址(虛擬內(nèi)存地址)。內(nèi)存池就通過把對象和一塊內(nèi)存綁定,對象的讀寫操作都會反應到這塊內(nèi)存上。

3)內(nèi)存是有限的,為了最大化內(nèi)存的利用率以及提高內(nèi)存分配回收的效率,netty實現(xiàn)了類似jemalloc內(nèi)存分配的方式給對象分配內(nèi)存。

4)獲取一個buffer對象-->給buffer對象屬性賦值(賦的值就是內(nèi)存的地址、大?。?/p>

5) ?比如現(xiàn)在需要分配一個UnpooledHeapByteBuf類型的ByteBuf對象,其初始大小為20,最大容量為100,因為是unpooled,意味著這各類型的ByteBuf是沒有對象池的,需要的時候直接new一個即可

? ? ? ? ? ? ? ? ? ? ? ? ? (1)new? ? ? ? ? ? UnpooledHeapByteBuf(this,initialCapacity,maxCapacity);

單純的一個沒有經(jīng)過初始化(成員變量沒有賦值)的ByteBuf是不能進行讀寫的,因為其讀寫方法都需要確切的讀寫內(nèi)存地址的。對于UnpooledHeapByteBuf類型的ByteBuf,其是一個HeapByteBuf,Heap意味著這個ByteBuf的讀寫操作是在JVM堆上進行的,其讀寫內(nèi)存地址需要在jvm對上進行分配,所以在初始化時要根據(jù)需要的大小創(chuàng)建一個Byte類型的數(shù)組Byte[]對UnpooledDirectByteBuf進行初始化,接下來對這個Buf的讀寫都會反應在這個字節(jié)數(shù)組中。

6)對于UnpooledDirectByteBuf類型的ByteBuf,Direct意味著這個ByteBuf的讀寫實現(xiàn)方法是以直接內(nèi)存為基礎進行實現(xiàn)的,其讀寫區(qū)域是在直接內(nèi)存上,在初始化時構造一個DirectByteBuffer對象(nio中的ByteBuffer)賦值給UnpooledDirectByteBuf的buf屬性,接下來對這個UnpooledDirectByteBuf類型對象的讀寫都會反應到這個ByteBuffer上。

7)對于pool類型的,

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 首先介紹些netty內(nèi)存池的層級結構,主要分為Arena、ChunkList、Chunk、Page、Subpage...
    滄行閱讀 7,798評論 4 10
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,759評論 11 349
  • 前奏 https://tech.meituan.com/2016/11/04/nio.html 綜述 netty通...
    jiangmo閱讀 6,201評論 0 13
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運行的地址不確定 關于...
    SeanCST閱讀 8,107評論 0 27
  • 2017.8.9 陰這幾天終于下起了雨昨晚是傾盆大雨而今晨綿綿細雨終于可以在暑假給高溫放幾天假現(xiàn)在坐在去往無錫...
    搖搖小朋友閱讀 224評論 0 0

友情鏈接更多精彩內(nèi)容