Netty
究极纲要
狗命要紧
展开
-
Netty之Jemalloc(四)PoolArena
PoolArena ,实现 PoolArenaMetric 接口,Netty 对 Jemalloc Arena 的抽象实现类,PoolArena 有两个子类实现:HeapArena ,对 Heap 类型的内存分配。DirectArena ,对 Direct 类型的内存分配。构造方法:/** * 是否支持 Unsafe 操作 */static final boolean HAS_U...原创 2020-04-02 22:02:04 · 419 阅读 · 0 评论 -
Netty之Jemalloc(三)PoolChunkList
PoolChunk 有如下三个属性,通过 prev 和 next 两个属性,形成一个双向 Chunk 链表 parent( PoolChunkList ):/** * 所属 PoolChunkList 对象 */PoolChunkList<T> parent;/** * 上一个 Chunk 对象 */PoolChunk<T> prev;/** * 下一个...原创 2020-04-02 20:10:14 · 178 阅读 · 0 评论 -
Netty之Jemalloc(二)PoolSubpage
上次讲Jemalloc 算法将每个 Chunk 切分成多个小块 Page,但是Page还是较大的内存块,所以直接使用仍旧浪费。因此,Jemalloc 算法将每个 Page 更进一步的切分为多个 Subpage 内存块。Page 切分成多个 Subpage 内存块,直接基于数组,通过数组来标记每个 Subpage 内存块是否已经分配,这里用PoolSubpage解决这个问题。一个page切分成多个...原创 2020-04-02 17:53:59 · 173 阅读 · 0 评论 -
Netty之Jemalloc(一)PoolChunk
之前写ByteBufAllocator文章里提到过Jemalloc算法,Netty中的内存池管理。Jemalloc算法将每个Arena切割成多个小块Chunk,为了进一步提高内存分配效率,并且减少内存碎片,再将Chunk切割为多个小块Page。Page 的大小为:16MB / 2048 = 8KB 。page-是可以分配的内存块的最小单位chunk-是一堆page的集合...原创 2020-03-31 19:27:20 · 337 阅读 · 0 评论 -
Netty之Buffer(四)ByteBufAllocator
这会看ByteBufAllocator最后一个子类:UnpooledByteBufAllocator,不基于内存池的ByteBuf分配器。原创 2020-03-26 21:31:55 · 405 阅读 · 0 评论 -
Netty之Buffer(三)ByteBufAllocator
这次看PooledByteBufAllocator基于内存池的 ByteBuf 的分配器。而 PooledByteBufAllocator 的内存池,是基于 Jemalloc 算法进行分配管理。Netty中JemallocPooledByteBufAllocatorMetric,实现 ByteBufAllocatorMetric 接口,PooledByteBufAllocator Metric...原创 2020-03-24 22:04:11 · 846 阅读 · 0 评论 -
Netty之Buffer(二)ByteBufAllocator
ByteBufAllocator是ByteBuf的分配器,负责创建ByteBuf对象,他主要有三个子类:PreferHeapByteBufAllocator ,倾向创建 Heap ByteBuf 的分配器。PooledByteBufAllocator ,基于内存池的 ByteBuf 的分配器。UnpooledByteBufAllocator ,普通的 ByteBuf 的分配器。这里先看P...原创 2020-03-23 21:39:56 · 742 阅读 · 0 评论 -
Netty之Buffer(一)ByteBuf内存泄漏检测2
io.netty.util.ResourceLeakTracker ,内存泄露追踪器接口,上文知每个资源( 例如:ByteBuf 对象 ),会创建一个追踪它是否内存泄露的 ResourceLeakTracker 对象,接口方法定义:public interface ResourceLeakTracker<T> { /** * 记录 * * R...原创 2020-03-19 19:37:34 · 735 阅读 · 0 评论 -
Netty之Buffer(一)ByteBuf内存泄漏检测1
Netty channel看完看Buffer。自从 Netty 4 开始,对象的生命周期由它们的引用计数( reference counts )管理,而不是由垃圾收集器( garbage collector )管理了。ByteBuf 是最值得注意的,它使用了引用计数来改进分配内存和释放内存的性能。–Netty官方文档翻译引用计数是计算机编程语言中的一种内存管理技术,是指将资源(可以是对象、内存...原创 2020-03-19 19:37:09 · 1448 阅读 · 0 评论 -
Netty之Channel(五)disconnect操作
java原生NIO SocketChannel不存在,调用Netty NioSocketChannel的disconnect(ChannelPromise promise) 时,会自动转换成close操作。所以嘞,Channel中disconnect(ChannelPromise promise) 方法,是 Netty 为 UDP 设计的。通过 NioSocketChannel中disconn...原创 2020-03-17 19:18:47 · 2491 阅读 · 0 评论 -
Netty之Channel(四)close操作
emm出现点状况,先看close。关闭操作,可能是客户端/服务端主动关闭,也可能是异常关闭。Netty NIO Channel的close操作分成客户端和服务端Channel两种关闭。客户端关闭NioSocketChannel,断开和服务器的连接;服务端关闭NioSocketChannel,断开和客户端的连接。服务端关闭NioServerSocketChannel,取消端口绑定,关...原创 2020-03-16 20:40:09 · 11399 阅读 · 1 评论 -
Netty之Channel(三)flush操作
flush()方法,刷新内存队列,将数据写入到对端。flush()方法和write()方法在正常情况下,流程差不多,例如在pipeline中对事件的传播,从tail节点传播到head节点,最后由Unsafe处理。然而两者Unsafe的处理方式不同。write方法将数据写到内存队列中。flush方法刷新内存队列,将其中数据写入对端。(还有些差异后文提)AbstractChannel 对 f...原创 2020-03-15 19:36:38 · 3692 阅读 · 0 评论 -
Netty之Channel(二)write操作
在原生的java Nio SocketChannel只有一种write方法,将数据写到对端,关于Netty NioSocketChannel 写入对端数据的过程,和写入相关的,在Netty Channel中有三种api方法:ChannelFuture write(Object msg)ChannelFuture write(Object msg, ChannelPromise promise...原创 2020-03-13 18:58:58 · 2525 阅读 · 0 评论 -
Netty之Channel(一)read与accept操作
关于Netty NIO服务器读取(read)、接收(accept)客户端数据的过程,以及Netty NIO客户端接收(read)服务器端数据结果这三点分析。客户端中,自身使用Netty NioSocketChannel,...原创 2020-03-04 23:29:07 · 1902 阅读 · 0 评论 -
Netty之ChannelPipeline(三)Outbound与Inbound事件的传播
Outbound事件是请求事件。Outbound事件的发起者是Channel,处理者是Unsafe。Outbound事件在Pipeline中传输方向是tail -> head。Outbount事件其中之一bind,以bind为例:AbstractChannelbind(SocketAddress localAddress, ChannelPromise promise):@O...原创 2020-02-11 00:06:54 · 857 阅读 · 0 评论 -
Netty之ChannelPipeline(二)移除ChannelHandler
上次说了添加,这次看看移除。remove(ChannelHandler handler)方法,从pipeline移除指定ChannelHandler对象@Overridepublic final ChannelPipeline remove(ChannelHandler handler) { remove(getContextOrDie(handler)); return t...原创 2020-02-04 21:30:43 · 1183 阅读 · 0 评论 -
Netty之ChannelPipeline(一)添加ChannelHandler
在Netty中每个Channel都有且仅有一个ChannelPipeline与之对应,而每个ChannelPipeline中又维护了一个由ChannelHandlerContext组成的双向链表,链表头是HeadContext,链表尾是TailContext,并且每个ChannelHandlerContext中又关联着一个ChannelHandler,如图示:...原创 2020-01-30 19:30:21 · 1008 阅读 · 0 评论 -
2.Java NIO之Selector使用方法简介
前言在之前文章1. Java NIO三大部件概述中简单提及Selector概念、优缺点以及Netty中对其的优化,在这篇文章将对Selector的使用方法进行简单介绍。1. Selector创建Selector selector = Selector.open();2. 注册Channel到SelectorSelector要能够管理Channel,需要将Channel注册到Select...原创 2020-01-01 20:11:19 · 585 阅读 · 0 评论 -
Netty之NioEventLoop的run方法
hhhEventLoop原创 2019-12-29 20:16:24 · 493 阅读 · 0 评论 -
netty之NioEventLoopGroup和NioEventLoop
Netty实战抠的图,说明了Channel、EventLoop、Thread以及EventLoopGroup之间的关系。一个EventLoopGroup包含一个或多个EventLoop一个EventLoop在他的生命周期内之和一个Thread绑定所以由EventLoop处理的I/O事件都将在他专有的Thread上被处理一个Channel在他的生命周期内只注册于一个EventLoop一...原创 2019-12-15 21:10:45 · 347 阅读 · 0 评论 -
1. Java NIO三大部件概述
Netty是什么?Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化...原创 2019-12-11 15:19:22 · 270 阅读 · 0 评论 -
Netty的demo概述
https://baike.baidu.com/item/Netty/10061624?fr=aladdin百度百科:“Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty ...原创 2019-11-03 20:33:43 · 289 阅读 · 0 评论