gpt4 book ai didi

java - 在现有的 jvm 进程中执行新的 java 代码

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:33 29 4
gpt4 key购买 nike

我有一个当前在 Windows shell 下运行的 java 进程。

负责序列化的线程之一被无限期阻塞,结果存储在内存中的重要信息不再写入磁盘。

如果我关闭进程,信息将会丢失。

如果我可以编写和编译一些新代码并让它在相同的内存空间中执行,这样在我关闭进程之前可以再次序列化所述信息会很方便。

该进程是使用 java -jar 命令启动的。

有了热点虚拟机的特性,有什么办法可以实现吗?

最佳答案

您可以使用 Attach API附加到虚拟机。 Here's an article that explains how to use it

这是一个代码示例:

String agentJAR = "myAgent.jar";
VirtualMachine vm = VirtualMachine.attach (processid);
vm.loadAgent(agentJAR);

其中代理是您的 jar 的名称。

代理 jar 包含一个 Agent ,它可以使用 Instrumentation API 与 JVM 交互。

要创建一个在运行时加载的代理,您可以实现一个 agentmain 函数,如下所示:

public static void agentmain(String agentArgs, Instrumentation inst); 

public static void agentmain(String agentArgs); 

Instrumentation object 用于在运行时修改类,您可能不需要。但希望您可以将需要运行的任何代码放在 agentmain 中,然后使用附加 API 在目标 JVM 中运行它。

祝你好运!

关于java - 在现有的 jvm 进程中执行新的 java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2130341/

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