JavaTM Platform
Standard Ed. 6

java.rmi.dgc
インタフェース DGC

すべてのスーパーインタフェース:
Remote

public interface DGC
extends Remote

DGC インタフェースは、分散ガベージコレクションアルゴリズムのサーバー側に使用されるものです。このインタフェースには dirty と clean の 2 つのメソッドがあります。dirty メソッドは、リモート参照がクライアント内で非整列化操作がされたときに呼び出されます (クライアントは VMID で表わされる)。これに対応する clean メソッドは、そのリモート参照への参照がクライアント内になくなったときに呼び出されます。dirty メソッドが失敗した場合には、strong を true に指定した clean メソッドを呼び出して、その呼び出しの通し番号を保持する必要があります。このようにすれば、以降に分散ガベージコレクタから誤った呼び出しを受け取ったときにそれを検出することができます。 リモートオブジェクトへの参照は、その参照を保持するクライアントから一定の期間だけ貸し出されます。貸し出し期間は、dirty 呼び出しを受け取ったときから始まります。貸し出しが破棄される前に、クライアントが持つリモート参照に対して追加の dirty メソッドを呼び出し、貸し出しを更新するのはクライアントの役目です。クライアントが貸し出しを破棄する前に更新しなければ、分散ガベージコレクタは、そのリモートオブジェクトはもうクライアントから参照されないものと見なします。


メソッドの概要
 void clean(ObjID[] ids, long sequenceNum, VMID vmid, boolean strong)
          clean メソッドは、ids で表される各リモートオブジェクト内の参照リストから vmid を削除します。
 Lease dirty(ObjID[] ids, long sequenceNum, Lease lease)
          dirty メソッドは、配列 ids に含まれるオブジェクト識別子に関連したリモートオブジェクト参照の貸し出しを要求します。
 

メソッドの詳細

dirty

Lease dirty(ObjID[] ids,
            long sequenceNum,
            Lease lease)
            throws RemoteException
dirty メソッドは、配列 ids に含まれるオブジェクト識別子に関連したリモートオブジェクト参照の貸し出しを要求します。lease には、クライアントの一意の VM 識別子 (VMID)、および要求した貸し出し期間が含まれます。ローカル VM 内でエクスポートされた各リモートオブジェクトごとに、ガベージコレクタは、参照リスト (オブジェクトへの参照を保持するクライアントのリスト) を用意します。貸し出しが許可された場合は、ガベージコレクタはそのクライアントの VMID を、ids 内に示される各リモートオブジェクトの参照リストに追加します。sequenceNum パラメータは、ガベージコレクタへの最後の呼び出しを検出して破棄するための通し番号です。以降、ガベージコレクタへの呼び出しのたびに、通し番号を増やしていく必要があります。 VMID はホストアドレスを含み、クライアントによってはセキュリティー上の制限からホストアドレスを取得できないため、VMID を生成できないクライアントもあります。この場合、クライアントは null の VMID を使うことができます。 分散ガベージコレクタは、そのようなクライアントに VMID を割り当てます。 dirty メソッドは、使用する VMID とそのリモート参照に許可された貸し出し期間を含む Lease オブジェクトを返します (サーバーは、クライアントの要求よりも短い貸し出し期間しか許可しないことがある)。クライアントがリモートオブジェクト参照を破棄したときに、対応する clean メソッドを呼び出すために、クライアントはガベージコレクタが使用する VMID を使用しなければなりません。 クライアントの VM は、VM 内で参照される各リモート参照に対して、最初の dirty メソッドだけを呼び出します (同じリモートオブジェクトに対して複数の参照がある場合でも同様)。また貸し出しを継続する場合には、クライアントは、貸し出しが破棄される前に dirty メソッドを呼び出す必要があります。特定のリモートオブジェクトへの参照がなくなったら、クライアントは、その参照に関連したオブジェクト ID に対する clean メソッドを呼び出す必要があります。

パラメータ:
ids - クライアントの呼び出しで参照済みとしてマークするためのオブジェクト ID
sequenceNum - シーケンス番号
lease - 要求した貸し出し
戻り値:
許可した貸し出し
例外:
RemoteException - dirty 呼び出しが失敗した場合

clean

void clean(ObjID[] ids,
           long sequenceNum,
           VMID vmid,
           boolean strong)
           throws RemoteException
clean メソッドは、ids で表される各リモートオブジェクト内の参照リストから vmid を削除します。通し番号を使用して、最後の clean 呼び出しを検出します。引数 strong が true の場合、clean の呼び出しは、失敗した dirty 呼び出しの結果として生じたものなので、このクライアントの vmid の通し番号を保存しておく必要があります。

パラメータ:
ids - クライアントの呼び出しで未参照としてマークするためのオブジェクト ID
sequenceNum - シーケンス番号
vmid - クライアント VMID
strong - 「strong」clean 呼び出しの作成
例外:
RemoteException - clean 呼び出しに失敗した場合

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。