什么是对象池

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

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

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

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

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,445评论 1 14
  • 我的,第二篇食記!!! 好激動喔 沒想到可以那麼快產出第二篇吃的出來。開心 終於來吃金色三麥了 金色三麥給我的印象...
    Elaine5280阅读 498评论 0 1
  • 《在战区做家长是什么体验》关于孩童教育,无法感同身受,但和战争中的人相比,我已幸运太多。 《认清你的价值,要求相应...
    吴瑜洁阅读 344评论 0 0
  • 2018年1月31日 星期三 大风 昨天发生了一件很让我开心的事情,回到家太晚了我就睡着了。现在...
    陈泉妡阅读 564评论 0 1