如何在java中的两个JVM之间传递对象?

时间:2016-04-12 04:58:00

标签: java serialization jvm

最近我在一次采访中被问到这个问题:你如何在两个JVM之间传递一个对象?我的回答是使用序列化,但我不知道它是否是正确的答案。如何在两个JVM之间传递对象?

4 个答案:

答案 0 :(得分:3)

因为您有两个不同的Java虚拟机,所以将对象从一个传递到另一个的唯一方法是以某种方式序列化对象。

答案 1 :(得分:3)

序列化可能是唯一的出路。根据您的堆栈,您可以拥有多种可能性之一

  • 序列化类并在另一端反序列化它们(记住远程ejb的)
  • 将一个对象写入一个文件(json等),并在另一端从共享文件夹
  • 中读取它
  • 或使用mciroservices发送和接收对象
  • 你也可以尝试像protobuf,avro这样的工具,因为他们专门处理序列化问题

我个人的偏好是拥有一个用于交换数据的小型服务器端组件(服务)。

答案 2 :(得分:2)

您可以在分布式环境中的2个JVM之间传递Java对象,只要这两个JVM版本相同即可。请注意,您的JVM依赖于平台(平台包括硬件(处理器)+ OS)。但是,您需要确保所有依赖库文件在两个JVM上均可用。另一个缺点是,即使您的JVM相同,但是如果您将一个JVM中运行的Java对象传递给接收JVM中运行的JRuby,则对象传递也是没有用的,因为两种之间的数据类型不同。

如果JVM相同且所有库均可用,则不建议使用对象传递,因为您可能决定在OS上从32位升级到64位,在这种情况下,还需要升级JVM。

仅在同一JVM中,我更喜欢对象传递。

答案 3 :(得分:0)

您可以在外部存储对象。可以使用像redis https://redis.io/这样的快速访问数据结构存储来代替文件。两个(或多个)实例都可以将数据读取和写入同一数据存储。您还可以研究JMS(Java消息服务)