上一篇【第55篇】Netty游戏服务器实战——10万在线游戏服务器架构下一篇【第57篇】PoolChunk内存分配源码全解析——buddy算法的工程实现一、堆内存 vs 直接内存对比Heap ByteBufDirect ByteBuf内存位置JVM堆内堆外操作系统分配速度快纳秒级慢毫秒级GC影响受GC管理不受GC手动释放I/O操作需要额外复制零拷贝监控jmap/jconsole较困难二、池化 vs 非池化// 非池化每次都分配新内存ByteBufbufUnpooled.buffer(1024);// → 高并发时频繁分配/释放GC压力大// 池化从内存池获取ByteBufbufPooledByteBufAllocator.DEFAULT.buffer(1024);// → 复用已有内存减少GC提升10-100倍三、配置指南// 全局配置JVM参数-Dio.netty.allocator.typepooled// 使用池化-Dio.netty.allocator.typeunpooled// 不使用池化-Dio.netty.noPreferDirecttrue// 禁用直接内存优先// 代码配置ServerBootstrapbnewServerBootstrap();b.childOption(ChannelOption.ALLOCATOR,newPooledByteBufAllocator(true,// preferDirect(服务端推荐true)4,// heapArenas4// directArenas));四、选择策略是否网络I/O ├── YES → Direct Pooled服务端推荐 │ 理由零拷贝减少GC └── NO → Heap Pooled业务计算 理由分配快GC安全 是否高并发 ├── YES → Pooled必须 └── NO → 随便五、实战对比// 100万次分配对比// Unpooled Heap: 120ms// Unpooled Direct: 3500ms// Pooled Heap: 25ms ← 最快// Pooled Direct: 45ms六、总结场景推荐理由服务端TCPDirectPooled零拷贝减少GC客户端HeapPooled分配快本地计算HeapGC安全文件传输Direct零拷贝上一篇【第55篇】Netty游戏服务器实战——10万在线游戏服务器架构下一篇【第57篇】PoolChunk内存分配源码全解析——buddy算法的工程实现