问:在ByteBuf这个地方的描述,内存管理是使用的操作系统层的内存管理方式,包括之前这个地方 也提到了,一部分内存是在堆外的内存,不是在gc堆中,是否可以理解为,netty主要的内存管理都是交给OS层的主内存,而不是在JVM的gc堆中?
答:1. 最终是Unsafe.allocateMemory() ,所以的确不是Java Heap中分配的。
2. Netty用Java参照jemalloc的思想 在 Unsafe.allocateMemory() 的基础上自己实现的。并非那个原版的C语言版本,而是Netty Java版本,思想是那个思想。
3.Netty中用的最多的是ByteBufAllocator实现。作为一个跨很多平台的,兼容性高的底层项目,Netty甚至会考虑到目标平台根本就没有 Unsafe.allocateMemory 功能,这个时候就是用 Java Heap了。