自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 Netty内存泄漏检测机制

广泛使用直接内存是Netty成为高效网络框架的原因之一。然而,直接内存释放并不受GC的控制,Netty中的对于直接内存的使用类似与C语言中(malloc、free),需要开发者手动分配和回收内存,而JVM GC只负责回收JAVA堆上的引用以及堆中内存。所有直接内存使用中,需要在JVM GC回收buf之前,手动调用release()方法去释放直接内存,否则存在内存泄漏。因此,在Netty中,在使用直...

2018-03-08 22:48:07 3459

原创 JDK动态代理源码分析

JDK动态代理建立在Java反射机制之上,在程序运行时对指定接口增强,降低接口的耦合性,被广泛应用Spring框架。本文将从Proxy的调用以及其缓存机制WeakCache介绍JDK动态代理的工作原理 在生成动态代理时,通常会调用Proxy的静态方法getProxyClass,在Proxy内部实际则是对getProxyClass0的简单包装private static Class<...

2018-03-08 00:12:53 297

原创 JUC ReentrantLock与ReentrantReadWriteLock

重入锁JUC中的重入锁ReentrantLock建立在AQS之上,其内部类Sync继承AQS,并实现其抽象方法,以完成可重入特性。实现可重入锁的需要注意的是:线程已经成功获取到锁才可重入;线程重入n次之后,历经释放n次,其他线程可以请求并获取到锁。在JUC重入锁的设计中提供了公平与非公平锁两种实现。其区别主要在于获取锁的顺序(公平锁有序),由于公平锁的有序性可能引起上下文切换,所以公平锁的吞吐...

2018-03-03 10:20:36 283

原创 JUC之AQS源码分析

队列同步器(AbstractQueuedSynchronizer)作为构建锁及其他同步器的基础框架,它通过volatile状态变量及FIFO队列实现线程获取或等待资源的逻辑,JUC中的同步组件(ReentrantLock、ReentrantReadWriteLock、CountDownLatch等)均基于此基础上实现。 AbstractQueuedSynchronizer的源码中,定义如下模板方...

2018-03-03 10:19:53 448

原创 Netty内存池之PoolArea

关于Netty内存池管理已经介绍了PoolChunk以及PoolSubPage来管理内存池。然后从应用层调用来看,应用层序并未直接去调用PoolChunk或PoolSubPage的allocate/free方法去管理内存,当我们通过PooledByteBufAllocator去分配操作内存时,它将内存的管理职责委托给PoolArea,本文将介绍PoolArea是如何管理内存的。 其成员变量如下:

2018-02-04 22:54:12 635

原创 Netty内存池之PoolSubPage

在前一篇中刚刚分析了PoolChunk的内存管理策略,简单回顾下PoolChunk的分配原则: 1) 平衡二叉树维护标记内存块的使用情况 2) > 8k, PoolChunk直接在二叉树上标记并分配内存 3) 本文接着PoolChunk中的内存申请private long allocateSubpage(int normCapacity) { int d = maxO

2018-02-04 15:45:16 431

原创 Netty内存池之PoolChunk

Netty内存池之PoolChunk为了避免频繁内存分配拉低系统性能,Netty4引入了内存池管理以提高内存分配效率。PoolChunk作为内存分配的核心类,将内存划分为块(Chunk)来管理。它通过构建一个平衡二叉树用以标记内存的使用情况,以来分配或释放内存。 1)PoolChunk有2048个Page(叶子节点)构成,每个Page默认大小为8k 2)每个父节点管理内存的为子节点的2

2018-02-04 00:41:11 635

原创 多路复用模型之epoll

作为多路复用IO模型,epoll致力于解决select与poll设计缺陷以提升系统并发能力。 (1) 并发效率不随文句柄树上升而线性下降: epoll避免了select模型中对所有每次所有文件描述符句柄轮询。它的底层采用红黑树记录所有文件句柄,并将活跃的连接存放至链表中,在处理IO事件时,只需遍历该链表即可。 (2) mmap加速内核与用户态拷贝: 无论select,poll还是epoll

2017-11-24 23:07:30 224

原创 IO多路复用模型之Select

**IO多路复用模型之Select** 在Unix/C中,Socket相关的函数操作都是阻塞式的,在单线程下服务端只能处理一个客户端请求。采用多线程处理客户端请求,虽然能充分发挥多核CPU能力,但是在客户端连接过多,并发度维持相对较高水平时,多线程引起线程的上下文切换将导致系统效率低下。Select多路复用模型的核心思想,在单线程下处理多客户端连接,Unix/C提供了相应函数库,具体

2017-11-23 23:09:50 355

原创 Netty启动过程分析

在介绍基于NIO Netty服务器启动过程之前,先来说说其相应的核心模块:引导类(ServerBootstrap,BootStrap)线程池(NioEventGroupLoop异步IO)Channel(与JAVA NIO中Channnel类似)ChannelPipeline(与Channel对应的流水线)Handler(Channel中可以指定相应的进行编解码等相应业务处理)如果对Cha

2017-11-23 16:20:53 1133

原创 Netty线程模型

Reactor模型单线程Reactor多线程Reactor主从ReactorNetty线程模型Reactor模型 一般编写的网络框架以IO操作为主,将IO操作分割为相对独立的事件模块。大多数都是基于Reactor模式进行设计和开发,Reactor模式基于事件驱动,特别适合处理海量的I/O事件。1 单线程ReactorReactor单线程模型:所有的IO操作都在同一个NIO线程上面完成,

2017-11-03 11:37:20 359

原创 NioEventLoop源码分析

NioEventLoop源码分析NioEventLoop源码分析1 轮询IO事件2 处理IO事件3 处理任务队列31 转移队列任务32 定器检查截至任务截至时间在Netty开发中,一般异步IO事件处理采用NioEventLoopGroup作为线程池,而NioEventLoop为线程池中单个线程,作为系统任务执行单元。接下来将从源码分析Netty是如何处理任务的。

2017-10-26 15:10:57 557

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除