java - 通过不同JVM的接口(interface)实现

标签 java jvm

假设您有接口(interface)定义。

该接口(interface)可以操作

然后,您有两个应用程序在不同的 JVM 中运行,并通过交换操作实例以某种方式进行远程通信。

我们称它们为应用程序A和应用程序B

如果应用程序A使用应用程序B的类路径中不可用的类实现Operation,则应用程序B将 仍然能够处理该接口(interface)的实现吗?即使 B 位于不同的 JVM 中?

最佳答案

这取决于您的“以某种方式远程通信”部分所发生的魔力。

如果这种通信是通过 RMI 或类似技术完成的,那么就可以了。应用程序 B 将创建一个到 JVM A 中的 Operation 对象的远程代理,并且调用该代理上的方法会生成对 JVM A 的 HTTP 请求,这些请求将根据该 JVM 中的实际对象进行解析(该对象具有访问权限)到实现类)。

如果这种通信是通过序列化对象并通过线路发送它们来完成的,那么它将不起作用。当应用程序 A 中的对象到达 JVM B 时,反序列化将失败(出现 ClassNotFoundException 或类似异常)。

很可能还有其他远程技术,在这种情况下,事情取决于实现。我知道类加载器可以从字节数组加载类,因此从概念上讲,这样的类加载器很有可能能够从远程源加载类。我相信,理论上网络库可以通过这种方式序列化实际的类,因此虽然 JVM B 本身并不知道实现类,但它的类加载器将根据需要提供该类的字节码。

关于java - 通过不同JVM的接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/443239/

相关文章:

java - CMS 垃圾收集日志中的 "Full GC Before GC"是什么意思?

Java,数据库——既然我们可以直接将它放入数据库,为什么还要分配一个新对象

java - Java 的类型安全 "schem based"*分层*配置读/写库?

jvm - 如何强制 HotSpot JVM 覆盖堆转储文件?

hadoop - 加载数据时 HDInsight VM 初始化错误

java - Spring原型(prototype)bean是否需要手动销毁?

具有通用类型的 Java collect() Stream

java - 原始 Java 的默认类型

java - 什么会导致 JVM 锁定机器的鼠标点击和键盘输入?

java - 为什么proguard不混淆方法主体?