netty内存知识整理

 

1.ByteBuf

netty内存知识整理

api:  read   ,write,set,mark,reset

byteBuf分类图:

 

netty内存知识整理

1.pooled和u'npooled

 

pooled:从预先分配好的内存中分配,unpooled:每次申请新内存  就是池化和非池化的区别

2.unsafe和非unsafe

unsafe:可以直接拿到jvm的内存,依赖jdk的unsafe ( JDK的rt.jar包中的Unsafe类提供了硬件级别的原子性操作,Unsafe类中的方法都是native方法 )其实就是在jdk的bytebuff包装了一下

 

unsafe是通过内存地址和下标去拿数据,非unsafe是通过数组和下标去拿数据

 

3.heap和direct

 

heap:从堆上内存分配就是数组byte[] array  unpool从array拿, pool从池中拿

directbuffer:堆外内存,不参与gc过程

 

4.ByteBufAllocator内存分配器

netty内存知识整理

 

5. Recycler

https://blog.****.net/alex_xfboy/article/details/90384332

6.byteBuf释放

1.连续的内存区段加入缓存(取得时候也是从缓存先取)

2.如果缓存满了 ->标记连续的内存区段未使用

3.ByteBuf加入对象池Recycler

 

问题:

1.怎么解决多线程得内存分配:fastThreadlocal ; 每个线程分配一个arean进行内存分配,线程进行隔离

2.不同大小的内存是如何进行分配得:使用对象池,缓存,二叉树分配,位图的技术来优化