第7章ByteBuf内存分配三个问题解答是否正确
来源:7-15 总结

鋒Nic
2018-06-29
问:内存的类别有哪些? 答:1.堆内[基于byte字节内存数组分配]/堆外[基于JDK的DirectByteBuffer内存分配],2.Unsafe[通过JDK的Unsafe对象基于物理内存地址进行数据读写]/非Unsafe[调用JDK的API进行读写],3.UnPooled[每次分配内存申请内存]/Pooled[预先分配好一整块内存,分配的时候用一定算法从一整块内存取出一块连续内存]
问:如何减少多线程内存分配之间的竞争? 答:PooledByteBufAllocator内存分配器结构维护Arena数组,所有的内存分配都在Arena上进行,通过PoolThreadCache对象将线程和Arena进行一一绑定,默认情况一个Nio线程管理一个Arena实现多线程内存分配相互不受影响减少多线程内存分配之间的竞争
问:不同大小的内存是如何进行分配的? 答:Page级别的内存分配通过完全二叉树的标记查找某一段连续内存,Page级别以下的内存分配首先查找到Page然后把此Page按照SubPage大小进行划分最后通过位图的方式进行内存分配
方便其他同学检查自己的答案是否正确
写回答
1回答
-
666,完全正确!
112018-06-29
相似问题