我有一个RMI服务器客户端关系(每个都在不同的JVM中运行),RMI服务器创建一个大对象并将其返回给RMI客户端。完成此操作后,哪个JVM(服务器或客户端)拥有该对象的实际内存?如果在JVM之间传递对象,那该怎么办?它是否涉及磁盘命中,还是有一些魔法让它超级快?
由于
答案 0 :(得分:2)
这取决于这个大对象是否是远程对象 - 它是否间接实现了java.rmi.Remote并被导出 - 或者它是否是一个普通的可序列化对象,在这种情况下它是从一个JVM复制到另一个JVM。如果它是前者,那么它总是留在创建它的JVM中。如果它是后者,那么当它作为参数传递给远程方法时,或者从对远程方法的调用返回时,它会从一个复制到另一个。这些副本是普通的Java对象,并且可以根据正常规则在任一端进行垃圾回收。