基本上,我正在尝试编写一些东西来列出 JVM 加载的每个类。我写的东西有效,但它只适用于它运行的 jvm。 我制作了一个 java 代理来动态注入(inject)另一个 JVM,但后来意识到我实际上并不知道如何注入(inject)它。 我如何实际将此代理发送到另一个 JVM? 可能吗?
最佳答案
动态代理需要声明一个 agentmain(String, Instrumentation)
方法,该方法在目标 VM 内连接时执行。您可以使用仅包含在 JDK 而不是 JRE 中的 tools.jar 依赖项(直到 Java 9)。但是,您可以将代理程序与 JDK 捆绑在一起,然后从那里附加到 JVM。
最大的陷阱是 API 因不同的虚拟机而异;但是,您可以使用像 byte-buddy-agent 这样的库其中包含针对不同 VM 的不同实现。可以使用以下方式完成附件:
ByteBuddyAgent.attach("my.jar", "my-pid");
这会将 my.jar 中包含的代理附加到 ID 为 my-id
的 Java 进程。
关于Java - 将 java 代理注入(inject)运行的 jvm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38948847/