摘要: 池化内存分配二 PoolChunk poolChunk表示的内存池中一整块的内存(默认16M),也是内存池向java虚拟机申请和释放的最小单位,即内存池每次会向虚拟机申请一个PoolChunk内存来进行分配,并在PoolChunk空闲时将PoolChunk中的内存释放。 内存池对于内存的分配其最终分 阅读全文
posted @ 2021-03-13 23:47 xiaojiesir 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 池化内存分配一 Netty 默认提供了池化对象的内存分配,使用完后归还到内存池,所以一套高性能的内存管理机制是 Netty 必不可少的。在上节课中我们介绍了原生 jemalloc 的基本原理,而 Netty 高性能的内存管理也是借鉴 jemalloc 实现的,它同样需要解决两个经典的核心问题: 在单 阅读全文
posted @ 2021-03-12 22:59 xiaojiesir 阅读(560) 评论(0) 推荐(0) 编辑
摘要: jemalloc内存分配算法 jemalloc内存分配算法简介 jemalloc 是由 Jason Evans 在 FreeBSD 项目中引入的新一代内存分配器。它是一个通用的 malloc 实现,侧重于减少内存碎片和提升高并发场景下内存的分配效率,其目标是能够替代 malloc。jemalloc 阅读全文
posted @ 2021-03-11 23:03 xiaojiesir 阅读(958) 评论(0) 推荐(0) 编辑
摘要: Netty 堆外内存 在 Java 中对象都是在堆内分配的,通常我们说的JVM 内存也就指的堆内内存,堆内内存完全被JVM 虚拟机所管理,JVM 有自己的垃圾回收算法,对于使用者来说不必关心对象的内存如何回收。 堆外内存与堆内内存相对应,对于整个机器内存而言,除堆内内存以外部分即为堆外内存。堆外内存 阅读全文
posted @ 2021-03-10 22:02 xiaojiesir 阅读(613) 评论(0) 推荐(0) 编辑
摘要: ByteBuf ByteBuf 是 Netty 的数据容器,所有网络通信中字节流的传输都是通过 ByteBuf 完成的。与JDK NIO 包中提供的 ByteBuffer 类类似。 我们首先介绍下 JDK NIO 的 ByteBuffer。下图展示了 ByteBuffer 的内部结构: ByteBu 阅读全文
posted @ 2021-03-09 22:51 xiaojiesir 阅读(228) 评论(0) 推荐(0) 编辑
摘要: ChannelOutboundBuffer 书接上文,NioSocketChannelUnsafe.write()方法,实际上调用的是AbstractUnsafe的write方法。 public final void write(Object msg, ChannelPromise promise) 阅读全文
posted @ 2021-03-08 22:08 xiaojiesir 阅读(215) 评论(0) 推荐(0) 编辑
摘要: DefaultChannelPipeline 回顾下事件处理机制 Netty 服务端启动后,BossEventLoopGroup 会负责监听客户端的 Accept 事件。当有客户端新连接接入时,BossEventLoopGroup 中的 NioEventLoop 首先会新建客户端 Channel,然 阅读全文
posted @ 2021-03-07 22:26 xiaojiesir 阅读(215) 评论(0) 推荐(0) 编辑
摘要: workerGroup注册NioSocketChannel 书接上文,ServerBootstrapAcceptor的channelRead(ChannelHandlerContext ctx, Object msg)方法将NioSocketChannel注册到workerGroup。 public 阅读全文
posted @ 2021-03-06 22:35 xiaojiesir 阅读(101) 评论(0) 推荐(0) 编辑
摘要: ServerBootstrapAcceptor 书接上文,讲到SingleThreadEventExecutor.this.run();即NioEventLoop.run()方法。 服务器启动后,等待事件,如果有连接事件,strategy为1。就会去执行processSelectedKeys方法。 阅读全文
posted @ 2021-03-05 22:17 xiaojiesir 阅读(174) 评论(0) 推荐(0) 编辑
摘要: NioEventLoop 书接上文 SingleThreadEventExecutor的doStartThread()方法,最终调用的是SingleThreadEventExecutor.this.run(); 调用了子类NioEventLoop的run方法,该方法没有break,只有个别情况才会c 阅读全文
posted @ 2021-03-04 22:16 xiaojiesir 阅读(88) 评论(0) 推荐(0) 编辑