Module  java.rmi
软件包  java.rmi.dgc

Interface DGC

  • All Superinterfaces:
    Remote


    public interface DGC
    extends Remote
    DGC抽象用于分布式垃圾回收算法的服务器端。 此界面包含两种方法:脏和干净。 当远程引用在客户机中解组(客户端由其VMID指示)时,会发出脏调用。 当客户端中不再有对远程引用的引用时,将进行相应的干净调用。 一个失败的脏呼叫必须安排一个强大的干净的呼叫,以便可以保留呼叫的序列号,以便检测分布式垃圾回收器按顺序接收到的未来呼叫。 对远程对象的引用由持有引用的客户端租用一段时间。 接收到脏呼叫时,租约期开始。 客户有义务通过在租赁期满之前对其所拥有的远程引用进行额外的肮脏呼叫来更新租约。 如果客户端在租期过期之前不更新租约,则分布式垃圾收集器将假定远程对象不再被该客户端引用。
    • 方法摘要

      所有方法  接口方法  抽象方法 
      Modifier and Type 方法 描述
      void clean​(ObjID[] ids, long sequenceNum, VMID vmid, boolean strong)
      干净的呼叫从'id'中指示的每个远程对象的引用列表中删除'vmid'。
      Lease dirty​(ObjID[] ids, long sequenceNum, Lease lease)
      对于与数组“ids”中包含的对象标识符相关联的远程对象引用的脏调用请求。
    • 方法详细信息

      • dirty

        Lease dirty​(ObjID[] ids,
                    long sequenceNum,
                    Lease lease)
             throws RemoteException
        对于与数组“ids”中包含的对象标识符相关联的远程对象引用的脏调用请求。 “租赁”包含客户端的唯一VM标识符(VMID)和请求的租期。 对于在本地VM中导出的每个远程对象,垃圾收集器维护一个引用列表 - 一个包含对它的引用的客户端列表。 如果租赁被授予,垃圾收集器将客户端的VMID添加到“ids”中指示的每个远程对象的引用列表。 'sequenceNum'参数是一个序列号,用于检测和丢弃对垃圾回收器的延迟调用。 对于垃圾回收器的每次后续调用,序列号应始终增加。 某些客户端无法生成VMID,因为VMID是一个通用唯一标识符,其中包含由于安全限制而导致某些客户端无法获取的主机地址。 在这种情况下,客户端可以使用空值为VM的VMID,分布式垃圾回收器将为客户端分配VMID。 脏调用返回一个包含所使用的VMID和为远程引用授予的租赁期的租赁对象(服务器可能决定授予比客户端请求更小的租约期)。 客户端必须使用垃圾回收器使用的VMID,以便在客户端丢弃远程对象引用时进行相应的干净调用。 客户端VM只需要为虚拟机中引用的每个远程引用创建一个初始的脏调用(即使它具有对同一个远程对象的多个引用)。 客户还必须在此类租赁期满之前,对远程引用的租约进行更换。 当客户端不再具有对特定远程对象的引用时,它必须为与引用相关联的对象ID调度一个干净的调用。
        参数
        ids - 通过调用客户机引用标记的对象的ID
        sequenceNum - 序列号
        lease - 请求租赁
        结果
        授予租赁
        异常
        RemoteException - 如果脏调用失败
      • clean

        void clean​(ObjID[] ids,
                   long sequenceNum,
                   VMID vmid,
                   boolean strong)
            throws RemoteException
        干净的呼叫从'id'中指示的每个远程对象的引用列表中删除'vmid'。 序列号用于检测较晚的清洁呼叫。 如果参数'strong'为真,那么干净的调用是一个失败的脏调用的结果,因此客户'vmid'的序列号需要被记住。
        参数
        ids - 通过调用客户端标记为未引用的对象的ID
        sequenceNum - 序列号
        vmid - 客户机VMID
        strong - 使'强'干净的通话
        异常
        RemoteException - 如果干净的通话失败