Netty - PooledByteBufAllocator

堆外内存,git

就是非JVM管理的,由os管理的内存,等同于c语言里面的mallco分配的内存github

故堆外内存的好处,socket

1. 不会有GC回收,缓解gc压力elasticsearch

2. 避免一次copy,发生到socket buffer的时候,若是是堆内内存须要copy到堆外一次post

问题,性能

回收是个问题;性能没有heap好,分配和回收的效率都更低.net

 

https://www.jianshu.com/p/ce7c6f5cb5f63d

https://blog.csdn.net/pentiumchen/article/details/45372625netty

markblog

Netty的池化内存管理方案,能够选择heap或direct

大致思想,

内存大小分级,按需分配

PoolArena 内存管理池

管理一堆chunk list,一个list的chunk数是可变的

chunk由page组成,chunk大小,由pagesize和page个数决定

为了针对小内存分布,subpage,tiny是以16字节为单位,small以512为单位,个数取决于page大小

 

 

 

二叉树组织内存块,便于连续内存分配

一共4094个page,分11层,叶节点一个8K,到第10层,一个节点16k,9层,32k

 

 

 

 Netty会用PoolThreadLocalCache来cache buffer,

参考https://kkewwei.github.io/elasticsearch_learning/2018/07/14/Netty-PoolThreadCache%E6%BA%90%E7%A0%81%E6%8E%A2%E7%A9%B6/

 

使用netty池化内存,要注意泄露

http://www.javashuo.com/article/p-gpevncrv-du.html 

相关文章
相关标签/搜索