我很想知道更多关于您的要求。正如另一个答案所暗示的那样,兵马俑可能正是您正在寻找的。
然而,Terracotta 提供的内容与您所要求的内容之间存在细微差别,因此我进行了调查。
不同之处在于,就您而言,Terracotta 不提供对对象的“远程”引用——事实上,在使用 Terracotta 时,完全没有 RMI、JMS 等的整个“远程”概念。
相反,在 Terracotta 中,所有对象都驻留在大型虚拟堆中。线程,无论是节点 1,还是节点 2、节点 3、节点 4 等,都可以访问虚拟堆中的任何对象。
无需学习特殊的编程或特殊的 API,“虚拟”堆中的对象与本地堆中的对象具有完全相同的行为。
简而言之,Terracotta 提供的是一个针对多个 JVM 的编程模型,其操作与针对单个 JVM 的编程模型完全相同。单独节点中的线程的行为就像单个节点中的线程一样——对象突变、同步、等待、通知在节点之间的行为与跨线程的行为完全相同——没有区别。
此外,与之前的任何解决方案不同,对象引用是跨节点维护的——这意味着您可以使用 ==。这都是在集群中维护 Java 内存模型的一部分,这是使“常规”Java(例如 POJO、同步、等待/通知)工作的基本要求(如果您不/不能保留这些都不起作用整个集群的对象身份)。
So the question comes back to you to further refine your requiements - for what purpose do you need "remote" pointers?