是否可以执行 运行nable JAR 并将其 运行 作为调用它的同一进程的一部分?

Is it possible to execute a runnable JAR and have it run as part of the same process from which it was called?

我有一个客户端应用程序和一个服务器应用程序。使用 JNA 的服务器是我需要使用的一些 dll 的包装器,因为长话短说,32 位 JVM 中没有足够的内存来 运行 客户端和服务器逻辑,因此需要单独的应用程序。

我需要能够在这两个应用程序之间共享内存 - 具体来说,我需要能够将指针从一个应用程序发送到另一个应用程序,反之亦然。我知道我可以从客户端 jar 中为服务器执行 运行nable JAR - 作为一个单独的进程。但是是否可以将它作为同一进程的一部分执行,只是在不同的线程上执行?这样我就可以将指针从一个发送到另一个。

这里有一些背景知识:

是的,这是可能的。有点。

  1. 为 JAR 文件创建一个新的 classloader。
  2. 使用 classloader,读取 MANIFEST.MF 资源并提取 JAR 的主要名称 class。
  3. 如果有 class-path 属性,解析它并创建相应的 classloader。
  4. 使用 classloader(s) 加载主要 class.
  5. main(String[])
  6. 查找 Method 对象
  7. 使用 Method.invoke(...) 以适当的 "command line" 参数调用它。

问题是,当您执行此操作时,您启动的应用程序将与原始应用程序共享标准 i/o 流,以及系统属性、默认字符集、默认时区等内容向前。

而且我认为这不会解决您的 "not enough memory" 或 "not enough address space" 问题。

最后,64 位 JVM 不能 加载 32 位 DLL,反之亦然。


一种可能的替代方法是使用共享内存:

  • Shared Memory between two JVMs