Netty内存池之基础知识

1.为什么需要内存池

Netty对于直接内存的需求

Netty 作为底层网络框架,为了更高效的网络传输性能,堆外内存(Direct ByteBuffer)的使用是非常高频的

直接内存的优缺点

  • 优点:堆外内存在 JVM 之外在有效降低 JVM GC 压力,提高传输性能(能减少一次拷贝)

  • 缺点:堆外内存是非常宝贵的资源申请和释放都是高成本的操作(创建堆外内存的速度比堆内存慢了10到20倍),使用不当还可能造成严重的内存泄露等问题

解决方案

  • 把堆外内存进行池化管理,多次重用堆外内存

直接内存被池化的好处

  • 提高直接内存分配效率

  • 减少内存泄漏的可能

注意

内存池一般配合直接内存使用,虽然内存池也可以配合堆内内存使用,但是应用在堆外内存时,效果更好

其他语言或中间件等的内存分配器

  • 注意:内存池/内存管理并不是Netty独有的概念,很多框架或者语言或者中间件都有

  • Redis默认的内存分配器是jemalloc,Netty的内存池也是jemalloc算法

  • GO语言的内存管理用的是tcmalloc算法,不过做了一些改良

你可能感兴趣的:(杂项,Netty,java,IM)