モジュール java.rmi
パッケージ 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メソッドは、idで表される各リモート・オブジェクト内の参照リストから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メソッドは、idで表される各リモート・オブジェクト内の参照リストからvmidを削除します。 シーケンス番号は最後のclean呼出しを検出するために使用されます。 引数strongがtrueの場合、cleanの呼出しは、失敗したdirty呼出しの結果として生じたものなので、このクライアントのvmidの通し番号を保存しておく必要があります。
        パラメータ:
        ids - クライアントの呼出しで未参照としてマークするためのオブジェクトID
        sequenceNum - シーケンス番号
        vmid - クライアントのVMID
        strong - 「strong」clean呼出しの作成
        例外:
        RemoteException - clean呼出しに失敗した場合