线程首次分配/回收内存时,首先会为其分配一个固定的Arena。线程选择Arena时使用round-robin的方式,也就是顺序轮流选取。各个线程保存各种Arena和缓冲池信息,这样可以减少竞争并提高访问效率。Arena将内存分为很多Chunk进行管理,Chunk内存保存Page,以页为单位申请。
申请内存分配时,会将分配到的规格分为几类:TINY,SMAILL,NORMAL和HUGE,分别对应不同的范围,处理过程也不相同。
目的:
Netty更好的管理内存,减少碎片化。
内存规格:
不能让用户随意的进行各种大小的内存分配,所以我们需要对传入的内存分配大小进行规格化处理。如图所示:
Netty保留四种分配策略: Tiny、 Small、 Normal、 Huge. 规格如上图所示,由io. netty buffer.PoolArena SizeClass来指明不同的策略。
1.Tiny: 16byte<= size <= 496byte中间以16byte为递增单位
2.Smal: 512byte<= size <= 4096byte中间以2倍为递增单位
3.Normal: N*8KB,最大为16MB
4.Huge:大于16MB的