1

我正在尝试使用 AdoptOpenJDK 的 OpenJ9 JVM 启动一个简单的 RMI 服务器,但是程序退出时没有错误/异常,并且 RMI 服务器没有启动。完全相同的程序适用于 AdoptOpenJDK 的 HotSpot JVM 和其他 oracle 变体。

示例代码:

   Registry registry = LocateRegistry.createRegistry(9002);
   RMIServer myServerInstance = new RMIServer();
   <<MyClassStub>>stub = <<MyClassStub>> UnicastRemoteObject.exportObject(myServerInstance, 9002);
            registry.rebind("RMIServer", stub);
4

1 回答 1

0

OpenJ9 开源社区贡献者确认这是 OpenJ9 的真正问题。OpenJ9 似乎在创建新服务器后立即丢弃它。当UnicastRemoteObject.exportObject 被调用时,会创建一个 WeakReference 并将其注册到 reaper 中的 ReferenceQueue。当导出的对象要被销毁时,收割者检查是否没有更多的导出对象需要跟踪,然后收割线程将杀死自己,如果没有其他线程保持其存活,则关闭虚拟机。

预计此问题将针对 -Release 0.24 (Java 8, 11, 15) Jan refresh, Release 0.25 (Java 16) 修复

注意:有关最新更新,请关注 https://github.com/eclipse/openj9/issues/10503

于 2020-12-17T07:08:32.317 回答