HashMap可能是我們使用最多的鍵值對(duì)型的集合類(lèi)了,它的底層基于哈希表,采用數(shù)組存儲(chǔ)數(shù)據(jù),使用鏈表來(lái)解決哈希碰撞。在JDK1.8中還引入了紅黑樹(shù)來(lái)解決鏈表長(zhǎng)度過(guò)長(zhǎng)導(dǎo)致的查詢(xún)...
SortedMap提供了獲取最大值與最小值的方法,但對(duì)于一個(gè)已經(jīng)排序的數(shù)據(jù)集,除了最大值與最小值之外,我們可以對(duì)任何一個(gè)元素,找到比它小的值和比它大的值,還可以按照按照原有的...
在介紹了Queue與Deque概念之后,這是要進(jìn)行分析的第一個(gè)實(shí)現(xiàn)類(lèi)。ArrayDeque可能大家用的都比較少,但其實(shí)現(xiàn)里有許多亮點(diǎn)還是值得我們關(guān)注的。 Deque的定義為d...
總結(jié):線程池ThreadPoolExecutor是通過(guò)控制Worker對(duì)象的數(shù)量來(lái)維護(hù)工作的工人集合,并且通過(guò)任務(wù)隊(duì)列workerQueue來(lái)存儲(chǔ)提交到線程池的任務(wù)。通過(guò)配置...
【總結(jié)】:JDK動(dòng)態(tài)代理的原理是通過(guò)目標(biāo)對(duì)象提供的classloader、interfaces的Class對(duì)象數(shù)組、InvocatiionHandler提供的代理邏輯來(lái)重新定...
上一節(jié)眼研究了PooledByteBufAllocator分配內(nèi)存的前兩個(gè)步驟,通過(guò)ThreadLocal的方式拿到PoolThreadCache之后,獲取對(duì)應(yīng)的Arena。...
上一節(jié)分析了UnpooledByteBufAllocator,包括了堆內(nèi)堆外內(nèi)存是如何分配的,底層時(shí)時(shí)如何獲取數(shù)據(jù)內(nèi)容的。本節(jié)分析分析PooledByteBufAllocat...
上一節(jié)查看了ByteBufAllocator,并了解了其抽象實(shí)現(xiàn),和一些根據(jù)不同的內(nèi)存類(lèi)型進(jìn)行內(nèi)存分配的思路。 本節(jié)研究UnpooledByteBufAllocator,包括...
上一節(jié)簡(jiǎn)單理解了以下ByteBuf的結(jié)構(gòu)。詳細(xì)的api還需要自己奪取嘗試。 本節(jié)學(xué)些ByteBufAllocator,內(nèi)存分配器(管理器) 查看ByteBufAllocato...
本節(jié)開(kāi)始學(xué)習(xí)netty的內(nèi)存分配機(jī)制,搜先是ByteBuf。 作為一個(gè)容器,源碼中的如下。有三塊區(qū)域 discardable bytes:無(wú)效空間(已經(jīng)讀取過(guò)的空間),可丟棄...
leecode刷題(1)-- 刪除排序數(shù)組中的重復(fù)項(xiàng) 刪除排序數(shù)組中的重復(fù)項(xiàng) 給定一個(gè)排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素只出現(xiàn)一次,返回移除后數(shù)組的新長(zhǎng)度...
從18到23節(jié)都是在學(xué)習(xí)pipeline里面的內(nèi)容,包括了ChannelHandler,ChannelHandlerContext,事件的傳播。本節(jié)進(jìn)行總結(jié)一下。 pipel...
上一節(jié)研究了outbound事件的傳播過(guò)程,是和ChannelOutboundHandler的添加順序相反的。從pipeline或者channel調(diào)用outbound事件的傳...