-
- All Superinterfaces:
-
Remote
public interface DGCextends Remote
DGC抽象用于分布式垃圾收集算法的服务器端。 此接口包含两个方法:脏和干净。 当远程引用在客户端中解组时(客户端由其VMID指示),将进行脏调用。 当客户端中不再存在对远程引用的引用时,将进行相应的清除调用。 失败的脏呼叫必须安排强干净呼叫,以便可以保留呼叫的序列号,以便检测分布式垃圾收集器无序接收的未来呼叫。 对持有引用的客户端租用对远程对象的引用一段时间。 租用期从收到脏话时开始。 在此类租约到期之前,客户有责任通过额外的脏调用来更新租约。 如果客户端在到期之前未续订租约,则分布式垃圾收集器会假定该客户端不再引用该远程对象。
-
-
方法详细信息
-
dirty
Lease dirty(ObjID[] ids, long sequenceNum, Lease lease) throws RemoteException
脏调用请求与数组'ids'中包含的对象标识符关联的远程对象引用的租约。 'lease'包含客户端的唯一VM标识符(VMID)和请求的租约期。 对于在本地VM中导出的每个远程对象,垃圾收集器维护一个引用列表 - 一个包含对它的引用的客户端列表。 如果授予租约,则垃圾收集器将客户端的VMID添加到“ID”中指示的每个远程对象的引用列表中。 'sequenceNum'参数是一个序列号,用于检测和丢弃对垃圾收集器的延迟调用。 对于每次后续对垃圾收集器的调用,序列号应该总是增加。 某些客户端无法生成VMID,因为VMID是一个通用唯一标识符,其中包含某些客户端由于安全限制而无法获取的主机地址。 在这种情况下,客户端可以使用null的VMID,分布式垃圾收集器将为客户端分配VMID。 脏调用返回一个Lease对象,该对象包含使用的VMID和为远程引用授予的租用期(服务器可能决定授予比客户端请求更短的租用期)。 客户端必须使用垃圾收集器使用的VMID,以便在客户端删除远程对象引用时进行相应的干净调用。 客户端VM只需要为VM中引用的每个远程引用进行一次初始脏调用(即使它对同一远程对象有多个引用)。 在此类租约到期之前,客户还必须进行脏话以续订远程引用的租约。 当客户端不再具有对特定远程对象的任何引用时,它必须为与引用关联的对象ID安排一个干净的调用。- 参数
-
ids
- 要标记为调用客户端引用的对象的ID -
sequenceNum
- 序列号 -
lease
- 要求的租约 - 结果
- 授予租约
- 异常
-
RemoteException
- 如果脏调用失败
-
clean
void clean(ObjID[] ids, long sequenceNum, VMID vmid, boolean strong) throws RemoteException
clean调用从'id'中指示的每个远程对象的引用列表中删除'vmid'。 序列号用于检测后期清除呼叫。 如果参数'strong'为真,则clean调用是脏调用失败的结果,因此需要记住客户端'vmid'的序列号。- 参数
-
ids
- 通过调用客户端标记为未引用的对象的ID -
sequenceNum
- 序列号 -
vmid
- 客户端VMID -
strong
- 让'强'干净的电话 - 异常
-
RemoteException
- 如果干净呼叫失败
-
-