当前位置: 首页 > 知识库问答 >
问题:

当使用JavaRMI时,代码在哪里执行?

衡高寒
2023-03-14

在没有任何Java RMI经验的情况下,我有一个天真的问题,但在搜索互联网后仍然不确定答案。

问题:

对我来说,有两种情况:

场景1:从本地启动一个Java程序,在执行过程中,它从存储在远程机器上的类调用一个方法,然后该方法的类将下载到本地机器上,并继续执行。

场景2:从本地启动Java程序,在执行过程中,它从存储在远程机器上的类调用一个方法,然后该方法将在远程机器上执行,结果将发送回本地机器。(这是否需要类/对象传输?)

JavaRMI使用哪一种?或者两者都没有?

来自RPC的维基百科:“RPC允许计算机程序在另一个地址空间(通常在共享网络上的另一台计算机上)执行子程序或过程”,似乎是第二种场景。

但是根据这篇论文减少远程类加载过程中的数据传输JavaRMI,这似乎是第一个场景。

共有2个答案

公孙黎昕
2023-03-14

方法将在远程计算机上执行。为此,本地机器下载一个类,该类封装本地机器和远程机器之间的通信。

章晗日
2023-03-14

当使用RMI时,您基本上有一个在客户端和服务器之间共享的接口。服务器必须有一个实现,客户端不应该有这个实现。因此,没有类加载或任何类型的客户端到服务器逻辑传输,客户端完全不知道服务器接口实现。

RMI序列化并传输方法参数,然后执行服务器逻辑,将结果序列化并传输回客户端。

 类似资料:
  • 问题内容: 我想在服务器启动(开发和生产)时执行以下代码行: 放入settings.py它不起作用,因为它需要先加载设置。 将它们放在视图中并从外部访问该视图也不起作用,因为有些中间件正在使用该数据库,并且这些中间件将失败并且不允许我访问该视图。 将它们放在中间件中是可行的,但是每次访问我的应用程序时都会调用它们。一种可能的解决方案可能是创建一个完成所有工作的中间件,然后将其从中间件中删除,因此不

  • 问题内容: 假设我对一种特定Linux实用程序(如)的源感兴趣。在哪里可以找到该实用程序的源代码? 问题答案: 我所做的是打字 然后走到最底下,找到“ GNU coreutils 6.10”。所以我用Google搜索了’coreutils’,然后…发现了刚刚链接到的网站joschi。

  • 问题内容: 因此,我一直在浏览linux glibc源代码,但看不到它实际上在做什么。以下来自,但它指示了许多源文件。这里发生了什么?显然我缺少了一些东西。秘密是什么,它在哪里进行系统调用或实际执行某项操作? 是一些传统的疯狂。 似乎是一个简单的宏设置。而且,尽管我发现有上百万种用法,但并未在任何地方定义它。 是否有帮助的指南来了解glibc如何在某处工作? 问题答案: 您发现的是未实现的系统的存

  • 问题内容: 我正在寻找Sun标准Java编译器的源代码。 jdk1.6.0_07有一些相关的类,但它们是接口(和)。在和下还有一些包,它们似乎是表示Java抽象语法树的接口。 但是我找不到编译器源-有人知道它在哪里吗? 问题答案: 检查此站点Java编程语言编译器(javac)组。来源在Mercurial存储库中。 jdk7 / tl / langtools(对于JDK 1.7) jdk6 / j

  • 问题内容: 在哪里可以找到javax.crypto源代码? --update 感谢OpenJdk版本,但是jdk6版本呢? 问题答案: 下载链接 http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/src/share/classes/javax/crypto(OpenJDK版本) http://download.java.net/jdk6/sourc

  • 所以我有一个用Java编写的方法: 假设我的应用程序调用了很多次... 在Java虚拟机上运行该方法的编译代码时,JVM将首先解释该方法。然后一段时间后,如果我理解正确,它将决定将其编译为机器语言。 此时, 它会被内存中的机器代码覆盖吗?如果被覆盖,大小差异问题将如何解决?如果将其写入内存中的其他位置,加载到内存中的字节码是否会被释放?而且,如果字节码和jit编译的代码都在内存中,当应用程序再次点