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

How to pass an object between two JVM in java?

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

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

序列化也许是唯一的出路。根据您的堆栈,您可能有几种可能性之一

  • 序列化 class 并在另一端反序列化它们(记住远程 ejb 的)
  • 将对象写入文件(json 等)并在另一端从共享文件夹读取它
  • 或使用 mciroservices 发送和接收对象
  • 您还可以试用 protobuf、avro 等工具,因为它们专门解决了序列化问题

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

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

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

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

对象传递是我只在同一个 JVM 中更喜欢的东西。