rmir​​egistry 或 JNDI 是否以序列化形式存储对象

Do the rmiregistry or JNDI store the object in serialized form

我了解到我可以使用 rmiregistry 或 JNDI 作为 RMI 的目录服务。据我了解,远程对象的存根已存储并与此类目录服务中的密钥相关联。

现在我的问题是,存根是以序列化形式存储还是作为 rmiregistry/JNDI 中的 "active" 对象存储?

如果序列化存储,分布式垃圾回收不会失败吗?

I read that I can use the rmiregistry or JNDI as a directory service for RMI.

不,你没有。您读到可以将注册表用作目录服务,并将 JNDI 用作它的 API。

As far as I understood, the stub for remote objects is stored and associated with a key in such a directory service.

正确。

Now my question is, is the stub stored in serialized form or as an "active" object in the rmiregistry/JNDI?

它被序列化到注册表并在到达时反序列化(解组)。在注册表中,它是一个普通的 Java 对象。

if it is stored serialized ...

不是。

JNDI确实和它没关系

RMI 注册表将远程对象存储为“活动”对象的原因是 RMI 注册表只是一个常规的 RMI 对象。它通过 java.rmi.registry.Registry 接口公开其操作,这是一个常规的 java.rmi.Remote 接口。

实际上与常规 RMI 对象有一个小区别 - RMI 注册表 gets exported 作为永久对象 - 它是一个内部选项,使对象不受分布式垃圾收集的影响。