Object Poolの利用シーン

Object Poolの利用シーン

 データベースのコネクションプールを例にObject Poolの必要性とメリットを説明しました。このほかに、Webコンテナにおけるサーブレットのスレッド自体もスレッドプールというObject Poolが利用されています。また、EJBコンテナでは、仕様としてEJBオブジェクトをプールして再利用するObject Poolがあります。さらにDIコンテナでは、多数のオブジェクトの利用を管理する際に、Object Poolが実装されています。

 Object Poolの利用は、こうしたコンテナやフレームワークだけでなく、独自のアプリケーションでも必要になる場面が結構あります。例えば大量にメールを配信する処理を行いたい場合などでは、メールを配信するオブジェクトでObject Poolを利用することで、スループットの向上やネットワークの帯域、接続数などを考慮することができます。それ以外にも、ログファイルなどの大量のファイルアクセスを行う場合には、ファイルアクセスを行うオブジェクトをObject Poolにした方が、OS上の同時ファイルアクセス数やディスクへの入出力を考慮してチューニングすることができます。

 Object Poolは、メモリやディスク、ネットワークなどの限られたリソースを利用する処理で利用されることが多いため、Resource Poolというパターンで説明されている場合もあります(*3)。

*3:Resource Poolパターンは、「Data Access Patterns」(Nock Clifton. Boston:Addison-Wesley)という書籍で紹介されています。

Object Poolパターンの概要

 図2にObject Poolパターンの一般的な構造を示しました。また、下表にObject Poolの目的、問題、構成要素、関連するパターンを整理しておきました。

・目的
 オブジェクトの生成にコストがかかる場合などで、オブジェクトの数を制限して再利用を管理する。

・問題
 特定の規則に沿った、オブジェクトの生成を管理する。オブジェクトの数や、オブジェクトの取得と利用、利用が終了したオブジェクトの再利用などについて管理が必要となる。

・構成要素
 Reusable Poolは、Clientによって利用されるReusableオブジェクトの利用を管理する。Clientは、Reusable Poolからオブジェクトを取得して、利用する。Reusable PoolによってすべてのReusableオブジェクトが保持されているため、統一した方法で管理できる。

・関連するパターン
 Singleton
 ReusablePool自体は通常Singletonパターンでオブジェクトを1つに制限する。
 Factory Method
 オブジェクトの生成では、Factory Methodが利用されることが多い。Factory Methodでは、生成のみを管理しその後のオブジェクトの管理はPoolが行う。

 Clientは、Reusableオブジェクトが必要となったときに、Reusable PoolのacuireObjectを呼び出し、Reusableオブジェクトを取得します。acuireObjectメソッドは、プールから利用可能な(未使用の)オブジェクトを割り当てて返し、オブジェクトを利用中としてマークします。プールに利用可能なオブジェクトがない場合、新たにインスタンスを生成して返します。オブジェクト数が上限に達していて生成できない場合、オブジェクトがプールに返されるまで待つか、または、取得失敗のエラーを返します。

 Clientは、Reusableオブジェクトが不必要になった(利用が終了した)ときに、Reusable PoolのreleaseObjectにReusableオブジェクトを引数として呼び出し、Reusableオブジェクトを開放します。releaseObjectメソッドでは、プールにオブジェクトを戻し、利用可能な状態にします。releaseObjectメソッドに相当する開放メソッドを、Reusableオブジェクト自身に実装する方法もあります(コネクションプールの場合のConnection#close()メソッドがこれに相当します)。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30