Netty之轻量级对象池Recycler

来源:互联网 发布:mac版解压rar软件 编辑:程序博客网 时间:2024/06/06 13:04

为什么说Recycler是“轻量级”的对象池?
功能简单:对象池只提供了创建和回收的基本接口,没有复杂的诸如有效性检测、空闲回收和拒绝策略等一些复杂功能。
逻辑简单:实现逻辑清晰简单,没有复杂的算法逻辑。

Recycler核心方法

  • get(): 获取一个对象;
  • recycle(T, Handle): 回收一个对象,T为对象泛型;
  • newObject(Handle): 当没有可用对象时创建对象的实现方法;

Recycler核心类

  • DefaultHandle: 对象的包装类,在Recycler中缓存的对象都会包装成DefaultHandle类。
  • Stack: 存储本线程回收的对象 。对象的获取和回收对应Stack的pop和push,即获取对象时从Stack中pop出1个DefaultHandle,回收对象时将对象包装成DefaultHandle push到Stack中。Stack会与线程绑定,即每个用到Recycler的线程都会拥有1个Stack,在该线程中获取对象都是在该线程的Stack中pop出一个可用对象。
  • WeakOrderQueue: 存储其它线程回收到本线程stack的对象 ,当某个线程从Stack中获取不到对象时会从WeakOrderQueue中获取对象。每个线程的Stack拥有1个WeakOrderQueue链表,链表每个节点对应1个其它线程的WeakOrderQueue,其它线程回收到该Stack的对象就存储在这个WeakOrderQueue里。
  • Link: WeakOrderQueue中包含1个Link链表,回收对象存储在链表某个Link节点里,当Link节点存储的回收对象满了时会新建1个Link放在Link链表尾。

Recycler创建和回收流程
创建和回收流程

Recycler存储结构
 存储结构

原创粉丝点击