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