我正在用JVM TI的幫助編寫一個分析器。使用JVMTI分析JVM,如何區分不同的JVM?
在C++中,我編寫了一個簡單的代理,它將收集的信息寫入套接字。使用Java Swing,我構建了一個簡單的GUI,它從套接字讀取這些數據以將其可視化。
但是我面臨一些可用性問題。我想提供功能來根據請求開始分析Java應用程序。有Attach API,它提供了將代理注入運行 JVM的的可能性。
但是啓動一個新的Java程序並注入代理有點複雜。一種方法是,使以命令行的呼叫,並開始從GUI事件探查器的Java程序:
java -agentlib:agent Program
我挺不喜歡這個想法,因爲它是某種哈克,但我看不出有什麼別的辦法, 你做?
總之我需要兩種方法啓動剖析JVM:
- 開始從從零開始一個Java applicatiom並開始分析它直接
- 附加到一個正在運行的JVM和注射劑開始剖析它
此外,我將需要區分我檢查的不同JVM,但如何做?沒有用於不同JVM的唯一標識符。 附加API給出了列出不同JVM的可能性,其名稱和ID,但在第一種情況下該怎麼辦?是否可以注入代理論據?