2011-04-07 35 views
0

我有一个RMI服务器客户端关系(每个都运行在不同的JVM中),并且RMI服务器创建一个大对象并将其返回给RMI客户端。在这之后,JVM(服务器或客户端)拥有该对象的实际内存?如果该对象在JVM之间传递,那么这是如何完成的?它是否涉及磁盘命中,或者是否有一些使其超快的魔法?内存中的Java RMI对象位置

由于

回答

2

这取决于此大对象是否是一个远程对象 - 它是否间接实现了java.rmi.Remote和导出 - 或者如果它是一个普通的序列化的对象,在这种情况下,它从一个JVM复制到另一个。如果它是前者,那么它总是停留在创建它的JVM中。如果它是后者,那么当它作为参数传递给远程方法时,或者从调用返回到远程方法时,它会从一个复制到另一个。这些副本是普通的普通Java对象,并且可以按照正常的规则在任一端进行垃圾收集。

+0

该对象将是一个BufferedImage,它不可序列化。这是否意味着无法从RMI方法返回BufferedImage? – Jon 2011-04-07 00:49:44

+0

是的,没错。 – 2011-04-07 01:06:50

+0

因此,为了从RMI服务器调用中获取BufferedImage,我必须自己将其写入磁盘?如果我试图返回它会发生什么? – Jon 2011-04-07 01:17:08