Module java.rmi
Package java.rmi.dgc

Interface DGC

所有超级接口:
Remote

public interface DGC extends Remote
DGC抽象用于分布式垃圾回收算法的服务器端。该接口包含两个方法:dirty和clean。当在客户端中解组远程引用时(客户端由其VMID表示),会发出dirty调用。当客户端中不再存在对远程引用的引用时,会发出相应的clean调用。如果dirty调用失败,必须安排一个强clean调用,以便保留调用的序列号,以便通过分布式垃圾回收器检测未来接收到的乱序调用。客户端持有的对远程对象的引用在一段时间内由客户端租用。租用期从接收dirty调用时开始。客户端有责任在这些租用到期之前通过进行额外的dirty调用来更新其持有的远程引用的租用。如果客户端在租用到期之前不续订租约,则分布式垃圾回收器假定该客户端不再引用该远程对象。
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    clean(ObjID[] ids, long sequenceNum, VMID vmid, boolean strong)
    clean调用从每个在'id's中指示的远程对象中删除'vmid'的引用列表。
    dirty(ObjID[] ids, long sequenceNum, Lease lease)
    dirty调用请求与数组'ids'中包含的对象标识符相关联的远程对象引用的租约。
  • Method Details

    • 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对象(服务器可能决定授予比客户端请求的更短的租约期限)。客户端必须使用垃圾回收器使用的VMID,以便在客户端放弃远程对象引用时进行相应的clean调用。客户端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's中指示的远程对象中删除'vmid'的引用列表。序列号用于检测延迟的clean调用。如果参数'strong'为true,则clean调用是由于dirty调用失败,因此需要记住客户端'vmid'的序列号。
      参数:
      ids - 要标记为由调用客户端未引用的对象的ID
      sequenceNum - 序列号
      vmid - 客户端VMID
      strong - 进行'strong' clean调用
      抛出:
      RemoteException - 如果clean调用失败