Netty的InternalThreadLocalMap的fastGet和slowGet

在看Netty的DefaultChannelPromoise的setSucess方法跟踪代码时,跟踪到了DefaultPromise的 notifyListeners()方法

获取当前线程的静态方法,根据当前的线程是否属于Netty的FastThreadLocalThread 来判断,一个是 fast 的,一个 是 slow 的

fast和slow的实现逻辑如下,获取当前线程的 InternalThreadLocalMap,如果没有,就创建一个

调用的父类 UnpaddedInternalThreadLocalMap 的构造方法,并传入了一个数组,而这个数组默认大小是 32,里面填充32 个空对象的引用。

slowGet的方法如下,在如果jdk获取null,还是用了Netty提供的方式。

Netty在此还是尽量避免使用jdk提供的 threadLocalMap,因为在处理速度上Netty的效率是优于jdk的jdk的,因为jdk的探测查询方式和索引计算方式导致效率低。另外threadLocalMap中的key为弱引用,在下一次GC时会被回收掉,但是value是强引用,是不会回收掉的,这里有发生内存泄漏的可能,参考

https://www.cnblogs.com/wuhaonan/p/11427119.html

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值