java资源池 对象池

定义:

有时我们的软件项目需要昂贵的对象创建(数据库连接,套接字连接,大型图形对象等)。 此成本可能是关于时间和/或内存的。 这些对象可能还需要经常创建。 那时,对象/资源池模式开始提供帮助。

对象池模式:

  • 重用未使用的昂贵对象,而无需重新创建这些对象(例如,图书馆中的书籍)。
  • 可能在需要它们之前急切地创建对象,以管理应用程序性能。
  • 可能会限制创建的对象数来管理应用程序性能和用户访问。

工作原则:

计算资源池架构 资源池的功能_计算资源池架构

对象池类图

客户端从对象池中请求一个对象(可重用)。 对象池具有预定义的可重用列表,并提供了池中的可用对象。 从客户的角度来看,给定的可重用性是一个新对象,但它(可能是对象创建策略,将在后面介绍)可能是一个预先创建的,带有新对象字段值的对象。 为了获得最佳性能,当不再需要可重用时,客户端应通知对象池。 以防万一客户端没有通知,对象池可以为每个创建的可重用定义超时。 对象池还必须具有用于可重用服务的同步机制,尤其是在多线程或多用户应用程序上。

何时使用/权衡:

如果对象不是昂贵的,则不应使用对象池模式,因为该模式需要客户端通知对象池(带来额外的代码复杂性)和对象创建管理代码(池的同步,对象创建限制策略等)。 此额外的管理代码还会带来一些性能损失。 如果可重用对象使用的性能提升大于额外的管理代码性能损失,并且应用程序必须频繁创建这些可重用对象,则建议使用对象池模式。

实施策略:

对象池限制:

  • 如果内存受到限制和/或需要限制最大客户端数,则可以为对象池(受限池)定义对象数限制值。
  • 如果没有限制,则不需要限制值(无限制池)。
  • 如果所有对象池列表都在使用中,则可以创建新对象(扩展池),也可以强制客户端等待(固定池)。

渴望/懒惰的创造:

  • 如果不经常执行应用程序启动,并且启动时间不是很重要,则可能在启动时创建对象池列表对象(急切创建)。
  • 如果不存在限制,则无需急于创建对象(延迟创建)。
  • 可能会急切地创建一些对象,而其他对象可能会根据应用程序参数延迟创建(混合创建)。

空对象池策略:

  • 如果对象池正在扩展,请创建一个新对象并返回它。
  • 如果对象池没有扩展,则返回null或强制客户端等待,直到准备好提供对象为止。

同步策略:

  • 对象池应具有用于对象服务的同步机制。 否则,特别是在多用户系统上,池系统可能会失败。

未使用的对象策略:

  • 在某些情况下,池对象的使用率可能低于预期。 对象池可能具有池对象删除策略(即减少对象限制)以提高性能。

返回对象策略:

  • 客户端应在作业完成后将池对象返回到池中。 但是池代码无法控制它,不良的客户端代码可能会返回池对象。 对于这种情况,对象池可能具有给定但未使用的池对象的计时器机制。

根据项目需求,应选择其中一些策略或混合版本并用于对象池。 但是“重用可用对象”原则是关键,并且对于任何实施策略都不能更改。

参考:来自CodeBuild博客的JCG合作伙伴 Cagdas Basaraner的“ 对象/资源池模式的理论研究” 。

翻译自: https://www.javacodegeeks.com/2013/04/a-theorical-look-into-objectresource-pool-pattern.html

java资源池 对象池