文档章节

netty中NioEventLoop类的SelectedSelectionKeySet

l
 li_tanjun
发布于 2017/03/21 11:13
字数 194
阅读 75
收藏 0

    NioEventLoop类有一个优化点是可以使用包中的SelectedSelectionKeySet来对JDK中的selector选择器的key存储结构进行优化。

     缺省下这个优化的关闭的,需要通过参数io.netty.noKeySetOptimization=true打开。

    实现方式主要是下面2个地方

    Object maybeSelectorImplClass = AccessController.doPrivileged

        (new PrivilegedAction<Object>() {
            @Override
            public Object run() {
                try {
                    return Class.forName(
                            "sun.nio.ch.SelectorImpl",
                            false,
                            PlatformDependent.getSystemClassLoader());
                } catch (Throwable cause) {
                    return cause;
                }
            }
        });

 

 

        Object maybeException = AccessController.doPrivileged(new PrivilegedAction<Object>() {
            @Override
            public Object run() {
                try {
                    Field selectedKeysField = selectorImplClass.getDeclaredField("selectedKeys");
                    Field publicSelectedKeysField = selectorImplClass.getDeclaredField("publicSelectedKeys");

                    selectedKeysField.setAccessible(true);
                    publicSelectedKeysField.setAccessible(true);

                    selectedKeysField.set(selector, selectedKeySet);
                    publicSelectedKeysField.set(selector, selectedKeySet);
                    return null;
                } catch (NoSuchFieldException e) {
                    return e;
                } catch (IllegalAccessException e) {
                    return e;
                } catch (RuntimeException e) {
                    // JDK 9 can throw an inaccessible object exception here; since Netty compiles
                    // against JDK 7 and this exception was only added in JDK 9, we have to weakly
                    // check the type
                    if ("java.lang.reflect.InaccessibleObjectException".equals(e.getClass().getName())) {
                        return e;
                    } else {
                        throw e;
                    }
                }
            }
        });

改变selector的属性为自定义的selectedKeySet

 

© 著作权归作者所有

l
粉丝 0
博文 4
码字总数 479
作品 0
深圳
私信 提问
Netty源码—一、server启动(1)

Netty作为一个Java生态中的网络组件有着举足轻重的位置,各种开源中间件都使用Netty进行网络通信,比如Dubbo、RocketMQ。可以说Netty是对Java NIO的封装,比如ByteBuf、channel等的封装让网络...

lacker
2018/07/22
0
0
Netty 源码解析 ——— NioEventLoop 详解

本文是Netty文集中“Netty 源码解析”系列的文章。主要对Netty的重要流程以及类进行源码解析,以使得我们更好的去使用Netty。Netty是一个非常优秀的网络框架,对其源码解读的过程也是不断学习...

tomas家的小拨浪鼓
2017/12/03
0
0
Netty 框架

Netty是Reactor模式事件驱动网络框架,Netty不仅用法简单,而且性能和可靠性都很好,所以被很多的中间件作为网络层使用,像dubbo, RocketMQ底层都采用了Netty。 Netty采用的是Reactor模式,由...

AaronSheng
2016/10/14
248
0
【原创】NioEventLoop 剖析

作者:星巴刻 前文《 NioEventLoop 的职责》从外部的角度阐述了 NioEventLoop 的首要责任:为注册在 NioEventLoop 上的 channels 服务,发现 channels 上的 I/O 事件,然后将事件转交 channe...

星巴刻
2017/11/19
0
0
Vert.x系列(五)--ContextImpl源码分析

前言: 线程安全是Vert.x的重要特性,但这一特性是由它依赖的netty实现的,Vert.x只是直接拿过来使用。 这里涉及到很多个类。 ContextImpl、EventLoopContext、NioEventLoop、和NioEventLoo...

冷基
03/31
19
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
33分钟前
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部