Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RMI对象在内存中的位置_Java_Memory_Rmi - Fatal编程技术网

Java RMI对象在内存中的位置

Java RMI对象在内存中的位置,java,memory,rmi,Java,Memory,Rmi,我有一个RMI服务器-客户机关系(每个都在不同的JVM中运行),RMI服务器创建一个大型对象并将其返回给RMI客户机。完成此操作后,哪个JVM(服务器或客户端)拥有该对象的实际内存?如果对象是在JVM之间传递的,那么是如何实现的?它是否涉及到磁盘命中,或者是否有一些魔法使它超快速 感谢这取决于这个大对象是否是远程对象——它是否间接实现了java.rmi.remote并被导出——或者它是否是一个普通的可序列化对象,在这种情况下,它是从一个JVM复制到另一个JVM的。如果是前者,那么它总是留在创建它

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


感谢

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

该对象将是一个不可序列化的BuffereImage。这是否意味着不能从RMI方法返回BuffereImage?因此,为了从RMI服务器调用返回BuffereImage,我必须自己将其写入磁盘?如果我尝试返回它,会发生什么?在运行时会得到NotSerializableException。我将研究如何将BuffereImage的基本部分(即,像RGB值这样的可移植像素表示)返回为一个可序列化的数组。或者提供一个“BuffereImage服务器”,它包装了您需要的任何BuffereImage API,以便您可以远程调用它们。