在同一台 Windows x86 機器上,啟動一個「監控 JVM」去監測另一個「被測 JVM」的記憶體與 CPU 使用率,以對比不同程式在同一虛擬機環境下的資源消耗差異。
利用 java.lang.Runtime.getRuntime().exec() 啟動被測程式並定期抓取進程資訊。
String[] cmd = {"path/to/second/jre/bin/java", "-jar", "target-app.jar"};
Process p = Runtime.getRuntime().exec(cmd);
// 將 tasklist 輸出導向檔案
Runtime.getRuntime().exec("cmd /c tasklist > log.txt");
解析 log.txt 獲取目標 PID 的 Memory Usage、CPU Time 等欄位。編寫 C/C++ 動態庫,調用 Windows GetProcessTimes() 等 API,再經由 JNI 暴露給 Java。

native long getProcessCPUTime();javah 生成 C HeaderGetProcessTimes() 累加 kernel + user time,換算為毫秒silib.dll,Java 端 System.loadLibrary("silib") 載入CPUUsageSnapshot 類,兩次採樣相減計算佔用率| 場景 | 推薦方案 |
|---|---|
| 快速原型、低頻採樣、跨平台需求 | 方案一 |
| 生產環境長期監控、高精度、性能敏感 | 方案二 |