
聊聊Netty那些事儿
文章平均质量分 96
netty源码解析。微信公众号:bin的技术小屋
bin的技术小屋
专注源码解析系列原创技术文章,分享自己的技术感悟
展开
-
时间轮在 Netty , Kafka 中的设计与实现
本文我们主要讨论了定时任务调度相关的主题,笔者一开始介绍了 JDK 的三种调度组件:Timer,DelayQueue,ScheduledThreadPoolExecutor。但他们的共同特点都是采用了小根堆这种数据结构来组织管理定时任务,然而在面对海量定时任务的添加与取消时,这种设计的时间复杂度会比较高 ——O(logn)。随后笔者介绍了 Netty 的单层时间轮 HashedWheelTimer,它将海量定时任务的添加与取消操作的时间复杂度降低到了O(1)原创 2024-12-25 10:03:48 · 999 阅读 · 0 评论 -
Netty 如何自动探测内存泄露的发生
要想触发 Netty 的内存泄露探测机制需要同时满足以下五个条件:应用必须开启内存泄露探测功能。必须要等到 ByteBuf 被 GC 之后,内存泄露才能探测的到,如果 GC 一直没有触发,那么即使是 ByteBuf 没有任何强引用或者软引用了,内存泄露的探测也将无从谈起。当 GC 发生之后,必须是要等到下一次分配内存的时候,才会触发内存泄露的探测。如果没有内存申请的行为发生,那么内存泄露的探测也不会发生。Netty 并不会探测每一个 ByteBuf 的泄露情况,而是根据一定的采样间隔,进行采样探测。原创 2024-11-07 10:23:25 · 1270 阅读 · 0 评论 -
谈一谈 Netty 的内存管理 —— 且看 Netty 如何实现 Java 版的 Jemalloc
深度剖析 Linux 伙伴系统的设计与实现》《细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现》《深度解读 Linux 内核级通用内存池 —— kmalloc 体系》好了,今天的内容就到这里,我们下篇文章见~~~原创 2024-10-25 11:39:54 · 1017 阅读 · 0 评论 -
小小的引用计数,大大的性能考究
到这里,Netty 对引用计数的精彩设计,笔者就为大家完整的剖析完了,一共有四处非常精彩的优化设计,我们总结如下:使用性能更优的 XADD 指令来替换 CMPXCHG 指令。引用计数采用了奇偶设计,保证了并发语义。采用性能更优的==运算来替换运算。能不走内存屏障就尽量不走内存屏障。原创 2024-08-20 12:35:49 · 781 阅读 · 1 评论 -
聊一聊 Netty 数据搬运工 ByteBuf 体系的设计与实现
本文笔者从八个角度为大家详细的剖析了 ByteBuf 的整体设计,这八个角度分别是:内存区域分布的角度,内存管理的角度,内存访问的角度,内存回收的角度,内存统计 Metric 的角度,零拷贝的角度,引用计数的角度,扩容的角度。到现在为止,我们只是扫清了 Netty 内存管理外围的一些障碍,那么下一篇文章,笔者将带大家深入到内存管理的核心,彻底让大家弄懂 Netty 的内存管理机制。好了,本文的内容就到这里,我们下篇文章见~~~原创 2024-08-14 10:39:51 · 1108 阅读 · 0 评论 -
一步一图带你深入剖析 JDK NIO ByteBuffer 在不同字节序下的设计与实现
让我们来到微观世界重新认识netty原创 2022-08-11 15:14:11 · 298 阅读 · 4 评论 -
Java 技术栈中间件优雅停机方案设计与实现全景图
从内核的信号量开始聊起一直到 JVM,Spring,Dubbo最后到 Netty,一文详尽优雅停机的前世今生原创 2022-07-09 12:28:00 · 453 阅读 · 0 评论 -
我为 Netty 贡献源码 | 且看 Netty 如何应对 TCP 连接的正常关闭,异常关闭,半关闭场景
Netty 关于处理 TCP 连接关闭时所需要面对的所有场景,你想知道吗?本文会全面清晰地告诉你答案!!!原创 2022-06-16 21:59:08 · 3498 阅读 · 4 评论 -
一文聊透 Netty IO 事件的编排利器 pipeline | 详解所有 IO 事件的触发时机以及传播路径
你是否面对 Netty 提供的众多异步回调函数而感到无从下手?你是否不清楚 Netty 究竟定义了哪些异步 IO 事件?你是否对这些异步 IO 事件的触发时机以及传播路径感到模糊?你是否好奇 Netty 如何通过 pipeline 灵活高效地编排这些 IO 事件?你是否好奇 Netty 如何设计实现这样一个工业级的责任链模式 pipeline?本文会从源码角度告诉你正确的答案!原创 2022-05-16 19:51:12 · 655 阅读 · 1 评论 -
一文搞懂Netty发送数据全流程 | 你想知道的细节全在这里
关于Netty如何高效地发送网络数据,你想知道的所有细节都在这里原创 2022-04-08 13:22:12 · 6213 阅读 · 0 评论 -
抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现
本文介绍了笔者如何发现了Netty一个隐藏很深的内存泄露相关的Bug,并详细介绍了Bug的修复过程。基于这个契机,详细剖析了对象池在Netty中的一些精妙设计和源码实现原创 2022-03-19 12:08:49 · 1297 阅读 · 2 评论 -
一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用
文章从计算机组成原理的角度详细阐述了对象在Jvm内存中的布局,以及字段排列规则。后面介绍了内存对齐,以及为什么要内存对齐,还有Jvm中压缩指针的原理及应用。中间介绍了false sharing产生的原因以及造成的性能影响和修复方案原创 2022-03-05 12:23:50 · 604 阅读 · 0 评论 -
Netty如何高效接收网络数据?一文聊透ByteBuffer动态自适应扩缩容机制
本文介绍了Netty如何高效接收网络连接全流程并深入剖析了ByteBuffer动态自适应扩缩容机制。阐述了为什么会使用堆外内存来为ByteBuffer分配内存,由此引出了Netty的内存池PooledByteBufAllocator原创 2022-02-23 11:38:21 · 1145 阅读 · 2 评论 -
抓到Netty一个Bug,顺带来透彻地聊一下Netty是如何高效接收网络连接的
抓到Netty一个Bug!!于是把发现修复Bug的过程总结成文,介绍一下Bug产生的原因,造成的影响,以及最终的修复方案。同时详细介绍一下Netty是如何高效的接收网络连接的!原创 2022-02-11 16:14:10 · 1651 阅读 · 1 评论 -
一文聊透Netty核心引擎Reactor的运转架构
介绍了Reactor整体的运行框架,并深入介绍了Reactor核心的工作模块的具体实现逻辑。通过本文的介绍我们知道了Reactor如何轮询注册在其上的所有Channel上感兴趣的IO事件,以及Reactor如何去处理IO就绪的事件,如何执行Netty框架中提交的异步任务和定时任务。最后介绍了Netty如何巧妙的绕过JDK NIO Epoll空轮询的BUG,达到解决问题的目的原创 2022-01-29 10:28:32 · 1748 阅读 · 0 评论 -
详细图解Netty Reactor启动全流程
本文我们通过图解源码的方式完整地介绍了整个Netty服务端启动大家第一眼看到这幅流程图,是不是脑瓜子嗡嗡的呢?大家先不要惊慌,问题不大,本文笔者的目的就是要让大家清晰的理解这幅流程图,从而深刻的理解Netty Reactor的启动全流程,包括其中涉及到的各种代码设计实现细节。在上篇文章《聊聊Netty那些事儿之Reactor在Netty中的实现(创建篇)》中我们详细介绍了Netty服务端核心引擎组件主从Reactor组模型 NioEventLoopGroup以及Reactor模型 NioEv.原创 2022-01-19 15:54:36 · 1033 阅读 · 8 评论 -
聊聊Netty那些事儿之Reactor在Netty中的实现(创建篇)
本文介绍了netty对各种IO模型的支持,以及主从Reactor模型在netty中的创建过程,netty对JDK NIO原生Selector的优化原创 2022-01-13 19:56:05 · 915 阅读 · 2 评论 -
聊聊Netty那些事儿之从内核角度看IO模型
IO模型的选择是构建一个高性能网络框架的基础,我们来分别从内核空间和用户空间的角度来一起探讨下五种IO模型和两种IO线程模型的实现原创 2022-01-12 22:19:24 · 1047 阅读 · 3 评论