第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回答

闪电侠

2018-06-29

666,完全正确!

1
1
鋒Nic
非常感谢!
2018-06-29
共1条回复

Java读源码之Netty深入剖析

解析netty各大组件细节,百万级性能调优,设计模式实际运用

2334 学习 · 283 问题

查看课程