吃透Netty源码系列五十五之NioEventLoopGroup创建细节一

一行代码的秘密

我们今天就来看看一行代码里面的细节,涉及很多东西,有很多开始不会关心的一些问题。

EventLoopGroup bossGroup = new NioEventLoopGroup(1);

NioEventLoopGroup的terminationFuture终止回调

在这里插入图片描述
在初始化后面会给每个终止回调添加一个相同的终止回调,只有所有的子事件循环NioEventLoop终止了才会回调事件循环组NioEventLoopGroup的成功终止。
在这里插入图片描述

NioEventLoop的初始化

io.netty.noKeySetOptimization

是否禁用选择器的selectedKeys优化,默认是不禁用,也就是要优化,至于怎么优化,后面会说,其实就是用反射改变了选择器的selectedKeyspublicSelectedKeys的属性,变成了SelectedSelectionKeySet类型,因为原生的底层是HashMap实现的,而优化的是数组实现的,提高效率。
在这里插入图片描述

io.netty.selectorAutoRebuildThreshold

这个表示NIO的空轮序多少次后重建选择器,也就是解决NIO的空轮询BUG的参数。
在这里插入图片描述

NioEventLoop构造方法的newTaskQueue

在这里插入图片描述

在这里插入图片描述

PlatformDependent

其实我想说的是这个类的初始化。
在这里插入图片描述

MAX_DIRECT_MEMORY_SIZE_ARG_PATTERN

这个是用来解析虚拟机设置参数的,后面会说,最大堆外内存的设置可以根据这个来设置。
在这里插入图片描述

平台相关属性

这里可以获取操作系统和虚拟机信息。
在这里插入图片描述

CAN_ENABLE_TCP_NODELAY_BY_DEFAULT

设置TCP是否禁止Nagal算法,其实就是看是否是安卓,不是安卓就禁止,不开启的话可能会有延迟的,可能你发送的数据太小,不会马上发送,要积压一会儿到了阈值才会发送,貌似好像小数据延迟200ms后也会发送,一般都会开启,为了低延迟。
在这里插入图片描述
在这里插入图片描述

PlatformDependent0的初始化

io.netty.noUnsafe是否禁用unsafe

在这里插入图片描述
如果禁用了会抛异常。
在这里插入图片描述

PlatformDependent0的isAndroid0

其实就是获取系统属性比较字符串:
在这里插入图片描述

io.netty.tryReflectionSetAccessible启用反射访问

在这里插入图片描述
默认java9以下的是可以启用,所以9以及以上就要设置啦,不然后面不会使用NoCleaner的缓冲区,这个貌似在以前的文章有讲过。
在这里插入图片描述

获取unsafe

可以看到要启用io.netty.noUnsafe才能去用反射获取unsafe属性。而这里申请了一个1字节的直接缓冲区也是为了后面的反射。
在这里插入图片描述

获取直接缓冲区的address属性

在这里插入图片描述

获取DirectByteBuffer的无清除器的构造方法

在这里插入图片描述
这个构造方法就是没有清除器cleaner的,而是直接用unsafe去释放。
在这里插入图片描述

获取address属性和字节数组的内存偏移

可以方便直接操作内存数据。
在这里插入图片描述

继续PlatformDependent属性

获取最大直接缓冲区大小

在这里插入图片描述
如果你的VM参数设置了,那就会在这里被正则取出来,然后处理。
在这里插入图片描述
否则就是调用运行时最大可分配内存,其实是虚拟机尝试获得的最大内存,应该是堆内的,这里堆外也设置成这个值了:
在这里插入图片描述
看看LOG,居然分了4G,我电脑还有9G内存可分配:
在这里插入图片描述
在这里插入图片描述

静态代码块

设置使用没有清理器的直接缓冲区

在这里插入图片描述

设置清理器

当然你如果强行要设置有清理器的,那也可以,他也会给你初始化好清理器,安卓当然是没有的。
分为两个版本,具体区别可以看这篇文章
在这里插入图片描述

优先使用直接缓冲区

默认就优先使用直接缓冲区。
在这里插入图片描述

有点长了,后面的下次再说吧。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值