什么是对象池

作者: 陆小飞 | 来源:发表于2019-03-09 23:17 被阅读2次

“池” 是什么,我们联想到池塘,用来养鱼的。我们可以随时捞两条鱼出来,满足我们的饱腹之欲。
这里突出两个概念,一个是“养”,即是保存并保鲜着;一个是“随时”,就是方便取用的意思。
如果自家没有池塘,要吃鱼会怎么办,就是要开车到集市中买两条鱼回来做,不方便。

在开发中我们会经常遇到池的概念,比如线程池啊,数据库连接池啊等等。当然这些都属于远程连接的一些池的处理。我们理解的就是为了加快访问速度,创建的这些池的处理。
我们可以说池的技术可以有以下这些好处:

1.对象开始就创建好了,不需要重新创建,拿出来就可以用,比如内存空间的初始化。
2.io可以复用,io的低延迟性拖累了整个系统的吞吐量,尤其是在io创建流或连接上,通过一次性创建后续保持复用,避免首次创建重新连接。

通过这两点好处还会带来以下的一些特征:

1.由于池的大小固定性,也避免了资源不停的做横向获取的浪费。
2.对象重复使用,内存稳定,减少内存回收几率。

整个池在整个程序类似一个单例,就如同每个线程可知道有这个池塘,都可以去这个池塘拿出一个内容出来用。比如拿出来直接计算。
但是到这里大家可能会觉得这个不就是一个容器么,放着我我已经初始化好了的对象,是不是和Java的Spring容器很像,但是池还会有更多的内容,比如对象的状态,是否能用,对象的心跳保持,保证新鲜等。

我们希望池都有哪些功能,比如创建的大小,创建的方法,当对象有问题销毁的方法,如何发现有问题的检测方法;还有就是取用的时候,别人可以不被取到,同时当整个池都用完之后,有足够的应对措施保证取用的正确性。比如给用户报告----我不够用了,或是说你先在这等等,等一个人用完了你再拿过去用。

下面我们来看看Java的包中一个比较好用的一个对象池,Apache-common-pool。
首先这个对象池的工具有个接口(ObjectPool),该接口可以被我们实现为具体的池的操作。此接口含有两个重要的方法,borrowObject() 和 returnObject(),一个是借(取),一个是还。另外为了整个池的初始化时需要往池中添加元素对象,也就是还有addObject()方法。在我们使用的时候,如果发现池中某个元素对象有问题,希望释放掉它,那么还有 invalidateObject()方法。到现在为止我们知道了有这么一个接口,实现创建,用还,失效等生命周期的管理。
大家可以使用该接口做简单的池的处理实践。

相关文章

  • 什么是对象池

    “池” 是什么,我们联想到池塘,用来养鱼的。我们可以随时捞两条鱼出来,满足我们的饱腹之欲。这里突出两个概念,一个是...

  • Netty对象池实现分析

    什么是对象池技术?对象池应用在哪些地方? 对象池其实就是缓存一些对象从而避免大量创建同一个类型的对象,类似线程池的...

  • 对象池化技术

    科普一下对象池化技术,来抄代码的直接略过就行 ; - )什么是对象池化?对象被创建后,使用完毕不是立即销毁回收对象...

  • Apache Commons-pool2要点整理

    为什么要用对象池 解决大对象的创建和销毁时的资源消耗。所以,常见的对象池有数据库连接池、线程池等 Apache C...

  • 你使用对象池了吗

    什么是对象池?对象池,简单的说就是一种为了避免重复创建,删除对象的解决方案。它可以通过复用游戏对象,一定程度上提高...

  • 对象池Pools优化

    目录介绍 01.什么是对象池 02.glide哪里用到对象池 03.多条件key缓存bitmap3.1 多条件ke...

  • Java线程池

    为什么需要线程池 对象复用思想在编程中有很多应用,不论是线程池还是连接池都是一种对象复用的思想。今天来谈谈Java...

  • iOS面试题3

    1.自动释放池是什么,如何工作? 答:内存释放池提供了一个对象容器,每次对象发送autorelease消息时,对象...

  • 什么是线程池?为什么要使用线程池?如何使用?

    1. 什么是线程池? 线程池其实就是将多个线程对象放到一个容器当中。 2. 为什么使用线程池? 可以重用线程,减少...

  • Java线程池

    什么是线程池,为什么要用到线程池 线程池:在多线程的应用下提高服务程序效率,减少创建和销毁对象的次数,并能灵活运用...

网友评论

    本文标题:什么是对象池

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