2011-04-07 31 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