Java RMI 服务器在哪里监听?

Where is the Java RMI server listening on?

我正在阅读一些与 Java RMI 相关的教程(其中之一 here),我发现自己对 RMI 服务器几乎不了解。

我启动一个 Java 主程序,并创建一个 UnicastRemoteObject,然后将对象绑定到 RMI 注册表服务器(按照教程)。之后 Java 主程序在绑定后退出。

UnicastRemoteObject 的父 class 是 RemoteServer,我假设我创建的每个远程对象(也是 UnicastRemoteObject)都是 Java监听一个匿名端口的进程 (JVM)。

那么如果我有10个远程对象,那么我有10个端口被占用来服务客户端远程调用?这听起来不对,但我真的找不到实际建立的RMI服务器在哪里以及它会占用多少端口用于远程客户端调用?

任何人都可以详细解释一下这个东西是如何工作的吗?

I start a Java Main program, and create a UnicastRemoteObject, after that bind the object in the RMI registry server (follow the tutorial). After that the Java Main program exit after the binding.

不,不会。只要远程对象保持导出状态,它就会保持活动状态。

The parent class of UnicastRemoteObject is RemoteServer, I assume every remote object (which is also UnicastRemoteObject) that I created is a Java process (JVM) that listening on one anonymous port.

没有。它是一个存在于当前 JVM 中的 Java 对象。不是一个单独的过程。

So if I have 10 remote object, then I have 10 ports occupied to serve the client remote invocation?

没有。除非您指定端口,否则您将获得系统分配的端口。通常该端口将在您从此 JVM 导出的所有远程对象之间共享。

This doesn't sound right

不是。

but I can't really find where is the RMI server that actually established and how many port it will occupy for the remote client invocation?

深入 RMI 实现 类。