![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
netty
文章平均质量分 85
tydhot
gogogo
展开
-
Netty技术细节源码分析-内存池之PoolChunk设计与实现
该文所涉及的netty源码版本为4.1.16。在一开始需要明确的几个概念在Netty的内存池的PoolChunk中,先要明确以下几个概念。page: page是chunk中所能申请到的最小内存单位。chunk: 一个chunk是一组page的集合在PoolChunk中,chunkSize的大小是2maxOrder*pageSize,其中2maxOrder是PoolChunk中的完全二叉树叶子结点的数量,pageSize则是单个page的大小。综合如上所述,举一个数字上的例子,默认情况下,单个原创 2020-10-18 14:15:05 · 353 阅读 · 2 评论 -
Netty技术细节源码分析-HashedWheelTimer时间轮原理分析
本文是该篇的修正版本文的github地址:点此该文所涉及的netty源码版本为4.1.6。Netty时间轮HashedWheelTimer是什么Netty的时间轮HashedWheelTimer给出了一个粗略的定时器实现,之所以称之为粗略的实现是因为该时间轮并没有严格的准时执行定时任务,而是在每隔一个时间间隔之后的时间节点执行,并执行当前时间节点之前到期的定时任务。当然具体的定时任务的时间执行精度可以通过调节HashedWheelTimer构造方法的时间间隔的大小来进行调节,在大多数网络应用的情况下原创 2020-10-08 23:19:59 · 544 阅读 · 0 评论 -
Netty技术细节源码分析-ByteBuf的内存泄漏原因与检测
该文所涉及的netty源码版本为4.1.6。Netty中的ByteBuf为什么会发生内存泄漏在Netty中,ByetBuf并不是只采用可达性分析来对ByteBuf底层的byte[]数组来进行垃圾回收,而同时采用引用计数法来进行回收,来保证堆外内存的准确时机的释放。在每个ByteBuf中都维护着一个refCnt用来对ByteBuf的被引用数进行记录,当ByteBuf的retain()方法被调用时,将会增加refCnt的计数,而其release()方法被调用时将会减少其被引用数计数。private bo原创 2020-10-08 23:16:13 · 967 阅读 · 0 评论 -
Netty技术细节源码分析-MpscLinkedQueue队列原理分析
本文的github地址:点此该文所涉及的netty源码版本为4.1.6。MpscLinkedQueue是什么在Netty的核心中的核心成员NioEventLoop中,其中任务队列的实现taskQueue便是MpscLinkedQueue。MpscLinkedQueue是Netty所实现的一个基于多生产者单消费者的无锁队列,针对NioEventLoop中任务队列的特点,其单消费者的场景在一开始就避免了从队列中取数据时加锁的必要,而其最精妙的地方便是在多生产者并发从队列中添加数据的时候也没有加锁,达到Ne原创 2020-09-13 22:26:53 · 406 阅读 · 0 评论 -
Netty技术细节源码分析-Recycler对象池原理分析
本文是该篇的修正版本文的github地址:点此该文所涉及的netty源码版本为4.1.6。Netty的对象池Recycler是什么Recycler是Netty中基于ThreadLocal的轻量化的对象池实现。既然是基于ThreadLocal,那么就可以将其理解为当前线程在通过对象池Recycler得到一个对象之后,在回收对象的时候,不需要将其销毁,而是放回到该线程的对象池中即可,在该线程下一次用到该对象的时候,不需要重新申请空间创建,而是直接重新从对象池中获取。Recycler在netty中被如何原创 2020-09-13 22:10:58 · 311 阅读 · 2 评论 -
Netty技术细节源码分析-FastThreadLocal源码分析
本文是该篇的修正版本文的github地址:点此Netty 的 FastThreadLocal 源码解析该文中涉及到的 Netty 源码版本为 4.1.6。Netty 的 FastThreadLocal 是什么A special variant of ThreadLocal that yields higher access performance when accessed from a FastThreadLocalThread.Internally, a FastThreadLocal u原创 2020-08-31 21:15:31 · 164 阅读 · 0 评论 -
netty 水位线与oom
Netty版本4.1.6。当channel被调用到writAndFlush()的时候,如同字面意思,实现了两次操作,write和flush,其中write的时候并没有将消息直接写入到socket中,而是封装为ChannelOutboundBuffer中的等待发送消息链表中的一个节点,只有等到flush操作发生的时候才会将链表中的消息全都写入到socket中。这样做的目的可以通过缓存消息的方式,减少flush到的套接字缓冲区的次数。因此,当write写入消息过快,而没来得及进行flush的时候将会导致链表原创 2020-08-24 02:18:04 · 874 阅读 · 0 评论 -
netty时间轮HashedWheelTimer文档翻译及简单说明
Netty版本4.1.6。Netty的时间轮HashedWheelTimer给出了一个粗略的定时器实现,之所以称之为粗略的实现是因为该时间轮并没有严格的准时执行定时任务,而是在每隔一个时间间隔之后的时间节点执行,并执行当前时间节点之前到期的定时任务。当然具体的定时任务的时间执行精度可以通过调节HashedWheelTimer构造方法的时间间隔的大小来进行调节,在大多数网络应用的情况下,由于IO延迟的存在,并不会严格要求具体的时间执行精度,所以默认的100ms时间间隔可以满足大多数的情况,不需要.原创 2020-08-14 23:05:28 · 643 阅读 · 0 评论 -
关于netty的FastThreadLocal的思考
Netty版本4.1.6。与jdk的ThreadLocal相比,netty的FastThreadLoacl具有更高的读写性能,如何针对原生的ThreadLocal进行优化。准备采用netty的FastThreadLoacl的线程都需要继承自netty实现的FastThreadLocalThread,在FastThreadLocalThread中,直接给出了如下字段。private InternalThreadLocalMap threadLocalMap;在这个前提下,当需要用到线程的Fa原创 2020-08-08 00:11:13 · 396 阅读 · 0 评论 -
netty ByteBuf对象池和内存泄漏检测实现走读
ByteBuf存放在堆外内存中,采用引用计数法的方式进行内存回收,具体的实现在AbstractReferenceCountByteBuf中。private static final AtomicIntegerFieldUpdater<AbstractReferenceCountedByteBuf> refCntUpdater;static { AtomicIntegerFieldUpdater<AbstractReferenceCountedByteBuf> up原创 2020-07-29 02:15:00 · 310 阅读 · 0 评论 -
Netty服务端口的绑定
调用netty的bootstrap的bind()方法会开始netty对本地端口的绑定与监听。在serverBootstrap的超类abstractBootstrap的bind()方法开始绑定的全过程。public ChannelFuture bind() { validate(); SocketAddress localAddress = this.localAddres...原创 2017-12-28 11:32:22 · 10188 阅读 · 2 评论 -
Netty的ChannelPipeline
* <pre>* I/O Request* via {@link Channel} or* {@link ChannelHand...原创 2017-12-29 10:28:41 · 268 阅读 · 0 评论 -
Netty的EventLoop
Netty在启动的时候需要配置相应的NioEventLoopGroup,才能保证当channel进行注册的时候能够注册相应的eventloop,并且保证当channel接收到请求的时候有相应的eventloop交给相应的channelPipeline进行处理。在NioEventLoopGroup的继承链中,NioEventLoopGroup的构造方法实际在其超类的超类MultithreadEv...原创 2017-12-30 15:00:37 · 702 阅读 · 0 评论 -
Netty的ChannelFuture和ChannelPromise
在netty中可以通过channelFuture和channelPromise来实现异步操作。,可以通过官方给出的channelFuture的注释来看到关于channelFuture的状态变化。 * <pre>* +---------------------------+* ...原创 2017-12-31 21:26:22 · 12193 阅读 · 3 评论