我正在借助 JVM TI 编写分析器。
在 C++ 中,我编写了一个简单的代理,它将收集到的信息写入套接字。使用 Java Swing,我构建了一个简单的 GUI,它从套接字读取这些数据以将其可视化。
但是我面临一些可用性问题。我想提供功能以根据请求开始分析 Java 应用程序。附加 API提供了将代理注入到正在运行的JVM 中的可能性。
但是要启动一个新的 Java 程序并注入代理就有点复杂了。一种方法是调用命令行并从 GUI Profiler 启动 Java 程序:
java -agentlib:agent Program
我有点不喜欢这个想法,因为它有点老套,但我看不到其他方法,是吗?
总结一下,我需要两种方法来开始分析 JVM:
- 从头开始一个 Java 应用程序并直接开始分析它
- 附加到正在运行的 JVM 并注入代理以开始对其进行分析
此外,我需要区分我检查的不同 JVM,但如何做到这一点?不同的 JVM 没有唯一标识符。Attach API提供了列出不同 JVM 及其名称和id的可能性,但在第一种情况下该怎么办?是否可以使用参数注入代理?