对象池技术

发布时间:2021-10-05 00:34:27 阅读:(132)

    对象池技术

    什么是对象池

    对象池是一个集合,里面包含了我们需要的已经过初始化且可以使用的对象。我们称这些对象都被池化了,也就是被对象池所管理,想要使用这样的对象,从池子里取一个就行,但是用完得归还。

    可以将对象池理解为单例模式的延展—多例模式。对象实例是有限的,要用可以,但用完必须归还,这样其他人才能再使用。

    与享元模式的联系

    使用享元模式可以节约内存空间,提高系统的性能。但这个模式也存在一个问题,那就是享元对象的内部状态和属性一经创建不能被随意改变。因为如果可以改变,则A取得这个对象obj后,就改变了其状态;B再去取这个对象obj时就已经不是原来的状态了。

    对象池机制正好可以弥补享元模式的这个缺陷。它通过借、还的机制,让一个对象在某段时间内被一个使用者独占,用完之后归还该对象。在独占的这段时间内使用者可以修改对象的部分属性(因为这段时间内其他用户不能使用这个对象);而享元模式因为没有这种机制,享元对象在整个生命周期内都是被所有使用者共享的。

    什么叫独占?就是你用着这个充电宝,同一时刻别人就不能用了,因为只有一个接口,只能给一个手机充电。

    什么叫共享?就是深夜几个人围一圆桌坐着,头顶上挂着一盏电灯,大家都享受着这盏电灯带来的光明,这盏电灯就是共享的。而且在一定范围内来讲它是无限共享的,因为圆桌上坐着5个人和坐着10个人,他们感觉到的光亮是一样的。

    对象池机制就是享元模式的一个延伸,也可以理解为享元模式的升级版。

    设计要点

    核心对象:

    • 要进行池化的对象:通常是一些创建和销毁时会分厂耗时,或对象本身非常占内存的对象
    • 对象池:对象的集合,其实就是对象的管理器,管理对象的借用、归还
      关键动作对象:
    • 借用对象:从对象池中获取对象
    • 适用对象:即使用对象进行业务逻辑的处理
    • 归还对象:将对象归还对象池,归还后这个对象的引用不能再用于其他对象,除非重新获取对象

    优缺点

    优点:

    • 借用和归还必须成对出现,用完必须归还,不然这个对象将一直处于被占用状态
    • 对已归还的对象的引用,不能再进行任何其他的操作,否则将产生不可预料的结果

    应用场景

    对象池机制特别适用于那些初始化和销毁的代价高且需要经常被实例化的对象,如大对象、需占用I/O的对象等,这些对象在创建和销毁时会非常耗时,以及对象本身非常占内存的对象。

    如果是简单的对象,对象的创建和销毁都非常迅速,也“不吃”内存;但有些对象,把它进行池化的时间比自己构建还多,这样就不划算了。

    因为对象池的管理本身也是需要占用资源的,如对象的创建、借用、归还这些都是需要消耗资源的。我们经常听到的(数据库)连接池、线程池用到的都是对象池机制的思想。