提前保存大量的资源,以备不时之需以及重复使用。池化技术应用广泛,如内存池,线程池,连接 池等等。

        由于在实际应用当做,分配内存、创建进程、线程都会设计到一些系统调用,系统调用需要导致程 序从用户态切换到内核态,是非常耗时的操作。因此,当程序中需要频繁的进行内存申请释放,进程、 线程创建销毁等操作时,通常会使用内存池、进程池、线程池技术来提升程序的性能。

        池化对连接或线程的复用,并对复用的数量、时间等进行控制,从而使得系统的性能和资源消耗达 到最优状态。

        使用池结构相比于不使用池结构的基本优势分析

        在衔接节点上,无池结构时需要不断的创建和销毁新服务对象必将给造成系统资源的巨大开销,导 致系统的性能下降,甚至系统资源耗尽

        使用池结构可以减少不必要的新服务对象的创建和销毁,用一个容器保存着各种需要的对象。对这 些对象进行复用,从而降低系统资源开销、提高程序的响应速度、改善效率。

        本质上,池是在资源使用时将使用率高且可以复用的对象保存在一个类似容器的地方,对这些对象 进行复用,从而降低非必须的系统资源开销、提高程序的响应速度、改善效率。 常用的池技术有:对象池, 内存池,Socket连接池、数据库连接池、线程池等。

        对象池: 对象池技术是一种常见的对象缓存手段。”对象“意味着池中的内容是一种结构化实体,这也就是一 般意义上面向对象中的对象模型;”池“(或动词池化)意味着将有生命周期的对象缓存到”池子“中进行管 理,即用即取。缓存的目的大多是为了提升性能,对象池技术的目的也即如此。所以,对象池技术的本 质简单来说就是:将具有生命周期的结构化对象缓存到带有一定管理功能的容器中,以提高对象的访问 性能。

        处理网络连接是对象池使用最多的场景。比如一些RPC框架的NettyChannel缓存(如motan),以及 数据库连接池的Connection缓存(如DBCP)等。除此之外,我们还可以利用对象池管理一些大对象, 这些对象有着相对复杂的构造过程。那么对象池技术与普通的本地缓存(比如guava cache)有什么区 别呢?其一,本地cache可能会有一些失效策略,比如按照时间、访问次数等,而对象池是可以没有这 些特性的;其二,也是最重要的一点,缓存中的对象是没有一个完整生命周期的概念,而对象池中的对 象是具有生命周期的,我们甚至可以对对象的生命周期施加影响。