全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス
インタフェース java.rmi.dgc.DGC
- public interface DGC
- extends Remote
DGC とは、分散ガベージコレクションアルゴリズムのサーバー側に使用されるものです。このインタフェースには dirty と clean の 2 つのメソッドがあります。dirty メソッドは、リモート参照がクライアント内でマーシャルの逆の操作がされたときに呼び出されます (クライアントは VMID で表わされます)。これに対応する clean メソッドは、そのリモート参照への参照がクライアント内になくなったときに呼び出されます。dirty メソッドが失敗した場合には、strong を true に指定した clean メソッドを呼び出して、その呼び出しの通し番号を保持しなければなりません。このようにすれば、以降に分散ガベージコレクタから誤った呼び出しを受け取ったときにそれを検出することができます。リモートオブジェクトへの参照は、その参照を保持するクライアントから一定の期間だけ貸し出されます。貸し出し期間は、dirty 呼び出しを受け取ったときから始まります。貸し出しが破棄される前に、クライアントがもつリモート参照に対して追加の dirty メソッドを呼び出し、貸し出しを更新するのはクライアントの責任です。クライアントが貸し出しを破棄する前に更新しなければ、分散ガベージコレクタは、そのリモートオブジェクトはもうクライアントからの参照されないものと見なします。
-
clean(ObjID[], long, VMID, boolean)
- 「id」で表される各リモートオブジェクトの参照リストから「vmid」を削除する。
-
dirty(ObjID[], long, Lease)
- 配列「ids」に含まれるオブジェクト参照に関連付けられたリモートオブジェクト参照の貸し出しを要求する。
dirty
public abstract Lease dirty(ObjID ids[],
long sequenceNum,
Lease lease) throws RemoteException
- 配列「ids」に含まれるオブジェクト識別子に関連付けられたリモートオブジェクト参照の貸し出しを要求します。「貸し出し」にはクライアントの一意の VM 識別子 (VMID) と要求した貸し出し期間が含まれています。ローカル VM 内でエクスポートされた各リモートオブジェクトごとに、ガベージコレクタは参照リスト (オブジェクトへの参照を保持するクライアントのリスト) を用意します。貸し出しが許可された場合は、ガベージコレクタはそのクライアントの VMID を、「ids」内に示される各リモートオブジェクトの参照リストに追加します。「sequenceNum」パラメータは、ガベージコレクタへの後の呼び出しを検出して破棄するための通し番号です。以降、ガベージコレクタへの呼び出しのたびに、通し番号を増やしていく必要があります。
VMID はホストアドレスを含む世界的に一意な識別子ですが、一部のクライアントはセキュリティ上の制限からホストアドレスを取得することができません。この種のクライアントはVMID を生成することができません。この場合、クライアントは null の VMID を使うことができます。分散ガベージコレクタはそのようなクライアントに VMID を割り当てます。
dirty メソッドは、使用する VMID とそのリモート参照に許可された貸し出し期間を含む Lease オブジェクトを返します (サーバはクライアントの要求よりも短い貸し出し期間しか許可しないことがあります)。
クライアントがリモートオブジェクト参照を破棄したときに、対応する clean メソッドを呼び出すために、クライアントはガベージコレクタが使用する VMID を使用しなければなりません。クライアントの VM は VM 内で参照される各リモート参照に対して、最初の dirty メソッドだけを呼び出します (同じリモートオブジェクトに対して複数の参照がある場合でも同様です)。また貸し出しを継続する場合には、クライアントは貸し出しが破棄される前に dirty メソッドを呼び出す必要があります。特定のリモートオブジェクトへの参照がなくなったら、クライアントは参照が関連付けられているオブジェクト ID に対する clean メソッドを呼び出す必要があります。
clean
public abstract void clean(ObjID ids[],
long sequenceNum,
VMID vmid,
boolean strong) throws RemoteException
- clean メソッドは各リモートオブジェクト内の参照リストから、「id」で表される「vmid」を削除します。通し番号を使用して後の clean 呼び出しが検出されます。引数「strong」が true の場合、clean 呼び出しは正当な dirty 呼び出しによって発生したものなので、このクライアントの「vmid」の通し番号を保存しておく必要があります。
全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス