gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:10:19 27 4
gpt4 key购买 nike

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

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

这里有一些背景知识:

Sending a JNA Pointer from one Java application to another Java application

最佳答案

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

  1. 为 JAR 文件创建新的类加载器。
  2. 使用类加载器读取 MANIFEST.MF 资源并提取 JAR 主类的名称。
  3. 如果有class-path属性,则解析它并创建相应的类加载器。
  4. 使用类加载器加载主类。
  5. 查找 Method 对象以获取 main(String[])
  6. 使用 Method.invoke(...) 通过适当的“命令行”参数来调用它。

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

我认为这不会解决您的“内存不足”或“地址空间不足”问题。

最后,64 位 JVM 无法加载 32 位 DLL,反之亦然。

<小时/>

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

关于java - 是否可以执行可运行的 JAR 并将其作为调用它的同一进程的一部分运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43978395/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com