java.rmi.dgc

接口
所有超级接口:
Remote

public interface DGC
     
extends Remote

DGC 抽象用于分布式垃圾回收算法的服务器端。此接口包含了两个方法:dirty 和 clean。当一个远程引用在客户机(客户机由其 VMID 表示)被解组时,则进行一次脏 (dirty) 调用。当客户机上不存任何针对远程引用的更多引用时,则进行一次相应的洁 (clean) 调用。一次失败的脏调用必须安排一次强洁调用,这样调用的序列号才能保持,以检测未来由分布式垃圾回收器接收的无序调用。针对远程对象的引用由保持该引用的客户机租借一段时间。租借期从接收到脏调用时开始。对租借进行续期是客户机的职责,其方式是:在租借期满之前,在客户机保持的远程引用上进行附加的脏调用。如果客户机在期满之前没有对租借进行续期,则分式布垃圾回收器假定远程对象已不再为该客户机所保持。


方法摘要
 void clean(ObjID[] ids, long sequenceNum, VMID vmid, boolean strong)
          洁调用从 'ids' 指示的每个远程对象的引用列表中移除 'vmid'。
 Lease dirty(ObjID[] ids, long sequenceNum, Lease lease)
          脏调用为(与包含在数组 'ids' 中的对象标识符关联的)远程对象引用请求租借。
 

方法详细信息

dirty

Lease dirty(ObjID[] ids,
            long sequenceNum,
            Lease lease)
            throws RemoteException
脏调用为(与包含在数组 'ids' 中的对象标识符关联的)远程对象引用请求租借。该 'lease' 包含了客户机的唯一 VM 标识符 (VMID) 和一个请求的租期。针对从本地 VM 中导出的每个远程对象,垃圾回收器维护了一个引用列表 - 保持对其引用的客户机列表。如果授予租期,垃圾回收器则为 'ids' 指示的每个远程对象添加客户机 VMID 到引用列表。'sequenceNum' 参数是一个用于检测和丢弃对垃圾回收器最近调用的序号。针对垃圾回收器的每次后续调用,该序号应该总是增加的。有些客户机不能生成 VMID,因为 VMID 是一个包含主机地址的通用唯一标识符,而有些客户机由于安全限制无法获取主机地址。在这种情况下,客户机可以使用一个为 null 的 VMID,并且分布式垃圾回收器为客户机赋予一个 VMID。脏调用返回一个包含所使用 VMID 和授予远程引用租期(服务器可能决定授予一个比客户机所请求更小的租期)的 Lease 对象。客户机必须使用垃圾回收器所使用的 VMID,以便当客户机删除远程对象引用时进行相应的洁调用。 客户机 VM 仅需为每个在 VM 中引用的远程引用进行一次初始脏调用(即使它对同一个远程对象持有多个引用)。客户机还必须在租借过期之前进行一次脏调用,以便对远程服务器上的租借进行续期。当客户机不再具有对特定远程对象的任何引用时,它必须为与此引用关联的对象 ID 安排一次洁调用。

参数:
ids - 调用客户机进行引用时要标记的对象 ID
sequenceNum - 序号
lease - 请求的租期
返回:
授予的租期
抛出:
RemoteException - 如果脏调用失败

clean

void clean(ObjID[] ids,
           long sequenceNum,
           VMID vmid,
           boolean strong)
           throws RemoteException
洁调用从 'ids' 指示的每个远程对象的引用列表中移除 'vmid'。序号用于检测最近的洁调用。如果参数 'strong' 为 true,则洁调用是一次失败的脏调用的结果,因此,应该记住客户机 'vmid' 的序号。

参数:
ids - 调用客户机取消引用时要标记的对象 ID
sequenceNum - 序号
vmid - 客户机 VMID
strong - 进行“强”洁调用
抛出:
RemoteException - 如果洁调用失败