Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)

[目次][用語][索引][前へ][次へ]

6.7.2 キャッシュの参照形態とキャッシュタイプ

キャッシュの参照形態には次の3種類があります。

どの形態でキャッシュを参照するかによってキャッシュタイプの種類が異なります。キャッシュの参照形態とキャッシュタイプの対応を次の表に示します。

表6-15 キャッシュの参照形態とキャッシュタイプの対応

キャッシュの参照形態 キャッシュタイプ
強参照 Full
強参照+弱参照※1 HardWeak
弱参照+ソフト参照※1 SoftWeak
弱参照 Weak
なし※2 None

注※1 参照形態を組み合わせます。

注※2 エンティティオブジェクトをキャッシュしません。


CJPAプロバイダでは,キャッシュのタイプを選択できます。アプリケーションの設計や環境によってタイプを選択してください。キャッシュタイプは,persistence.xmlで指定します。persistence.xmlについては,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「6.2 persistence.xml」を参照してください。

次にキャッシュタイプについて説明します。

<この項の構成>
(1) Full
(2) HardWeak
(3) SoftWeak
(4) Weak
(5) NONE

(1) Full

すべてのエンティティを強参照でキャッシュします。

キャッシュタイプにFullを指定した場合,データベースへのアクセスが少なくなるため,処理に対する負荷が少なくなります。ただし,メモリを占有し続けるため,メモリへの負荷が高くなります。

Fullは,エンティティオブジェクトの存続期間が長く,頻繁なアクセスを必要とする少数のエンティティオブジェクトで作成される場合に指定します。また,多数のエンティティオブジェクトを読み取る場合は,メモリの負荷が高くなるので,複数レコードを一括更新する場合の使用はお勧めしません。

Fullを指定した場合,指定されたキャッシュサイズで強参照領域を確保します。強参照領域が規定のサイズを超えた場合,Hashtableの仕様に基づいて領域を増やします。Fullを指定した場合のキャッシュ内のイメージを次の図に示します。

図6-15 Fullの場合のキャッシュ内イメージ

[図データ]

(2) HardWeak

強参照と弱参照でキャッシュします。

エンティティオブジェクトをリストで保持するときには,強参照を使用します。キャッシュサイズに指定した値だけ,強参照領域を固定長で作成します。キャッシュサイズが指定された値に達すると,古いエンティティオブジェクトを弱参照に移動します。このとき,キャッシュへの登録が最も長く使用されていないエンティティオブジェクトから順に弱参照に移動されます。弱参照に移動したエンティティオブジェクトが使用されると,再度,強参照の領域に格納されます。

HardWeakを指定すると,存続期間の長いエンティティオブジェクトを使用して,キャッシュで使用されるメモリを効率良く制御できます。

SoftWeakを使用したシステムでメモリ不足の状態が頻繁に発生する場合には,ソフト参照の利点を生かすことができないため,HardWeakを使用してください。HardWeakの場合のキャッシュ内イメージを次の図に示します。

図6-16 HardWeakの場合のキャッシュ内イメージ

[図データ]

HardWeakの場合,強参照のキャッシュ領域では強参照でキャッシュを保持します。また,弱参照のキャッシュ領域では弱参照でキャッシュを保持します。

(3) SoftWeak

ソフト参照と弱参照でキャッシュします。

ソフト参照を使用して,エンティティオブジェクトをリストで保持し,キャッシュサイズに指定した値だけ,ソフト参照領域を固定長で作成します。キャッシュサイズが指定された値に達すると,古いエンティティオブジェクトを弱参照の領域に移動します。このとき,キャッシュへの登録が最も長く使用されていないエンティティオブジェクトから順に弱参照に移動されます。弱参照に移動したエンティティオブジェクトが使用されると,再度,強参照の領域に格納されます。

SoftWeakを指定すると,存続期間の長いエンティティオブジェクトを使用して,キャッシュで使用されるメモリを効率良く制御できます。このため,キャッシュ機能を使用する場合は,SoftWeakを指定することをお勧めします。SoftWeakの場合のキャッシュ内イメージを次の図に示します。

図6-17 SoftWeakの場合のキャッシュ内イメージ

[図データ]

SoftWeakの場合,ソフト参照のキャッシュ領域ではソフト参照でキャッシュを保持します。また,弱参照のキャッシュ領域では弱参照でキャッシュを保持します。

(4) Weak

すべてのエンティティを弱参照でキャッシュします。

このため,すべてのエンティティオブジェクトがGCの対象になります。Weakを指定するとメモリへの負荷が少なくなりますが,GCによってキャッシュが削除されるおそれがあります。エンティティオブジェクトのキャッシュ機能を重視しないシステムで使用してください。Weakの場合のキャッシュ内イメージを次の図に示します。

図6-18 Weakの場合のキャッシュ内イメージ

[図データ]

Weakの場合,弱参照でエンティティをキャッシュします。

(5) NONE

エンティティオブジェクトはキャッシュされません。エンティティオブジェクトをデータベースから読み取ったあと,すぐに破棄する場合に使用します。