美文网首页
java之循环引用

java之循环引用

作者: wangxiaowu241 | 来源:发表于2018-12-02 11:33 被阅读0次

    在学习java内存模型及垃圾回收时提到了引用计数法无法解决循环引用的问题,心里一直在思考怎么才是循环引用。
    netty中的循环引用的例子。

    例如:NioServerSocketChannel类中有内部类NioServerSocketChannelConfig。每一个NioServerSocketChannel实例对象都有全局变量NioServerSocketChannelConfig的实例对象,而NioServerSocketChannelConfig实例对象在构造的时候也是需要将NioServerSocketChannel实例对象引用进去。也就是NioServerSocketChannel实例对象和NioServerSocketChannelConfig实例对象相互引用了。也就是循环引用。

    public class NioServerSocketChannel extends AbstractNioMessageChannel
                                 implements io.netty.channel.socket.ServerSocketChannel {
    
        private static final ChannelMetadata METADATA = new ChannelMetadata(false, 16);
        private static final SelectorProvider DEFAULT_SELECTOR_PROVIDER = SelectorProvider.provider();
    
        private static final InternalLogger logger = InternalLoggerFactory.getInstance(NioServerSocketChannel.class);
    
      
        //NioServerSocketChannel实例对象的全局变量ServerSocketChannelConfig的实例
        private final ServerSocketChannelConfig config;
    
    public NioServerSocketChannel(ServerSocketChannel channel) {
        super(null, channel, SelectionKey.OP_ACCEPT);
        //在初始化config的时候将自己(NioServerSocketChannel的实例对象)也传入了
        config = new NioServerSocketChannelConfig(this, javaChannel().socket());
    }
    
    private NioServerSocketChannelConfig(NioServerSocketChannel channel, ServerSocket javaSocket) {
        super(channel, javaSocket);
    }
    

    相关文章

      网友评论

          本文标题:java之循环引用

          本文链接:https://www.haomeiwen.com/subject/ilkjcqtx.html