3

VisualVMはそれを本当に素晴らしくします、それぞれの完全なメインクラス名は左側のサイドバーナビゲーションに表示されます。これらの名前はどのように取得されますか?Attach APIは、実行中のすべてのJVMに表示名を提供しますが、一部の表示名は少し肥大化しているように見えます。たとえば、Eclipse:

C:\Program Files\Eclipse\plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar -os win32 -ws win32 -arch x86_64 -showsplash -launcher C:\Program Files\Eclipse\eclipse.exe -name Eclipse --launcher.library C:\Program Files\Eclipse\plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1.R36x_v20100810\eclipse_1309.dll -startup C:\Program Files\Eclipse\plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar -exitdata 1084_58 -product org.eclipse.epp.package.jee.product -vm C:\Windows\system32\javaw.exe -vmargs -Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -XX:MaxPermSize=256m -jar C:\Program Files\Eclipse\plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar

VisualVMがそれを短縮するところ:org.eclipse.equinox.launcher.Main

彼らはどのようにそれを取得しますか?現在のJVMから、すべてのスレッドのメインクラスを簡単に取得できます。

4

2 に答える 2

6

VisualVMソースを確認すると、次のようになります。

MonitoredHost monitoredHost = MonitoredHost.getMonitoredHost("//localhost");

List<MonitoredVm> monitoredVms = new ArrayList<MonitoredVm>();
Set<Integer> vms = monitoredHost.activeVms();
for (Integer vm : vms) {
   monitoredVms.add(monitoredHost.getMonitoredVm(new VmIdentifier(vm.toString())));
}        

for (MonitoredVm monitoredVm : monitoredVms) {
   System.out.println(MonitoredVmUtil.commandLine(monitoredVm))
}
于 2011-04-24T16:10:17.950 に答える
1

コマンド プロンプトを開き、jps -lm と入力します。

これにより、PATH 内の現在の JVM で実行されているすべての Java プロセスが次の情報とともに表示されます。

  • メインクラス
  • 渡された引数
  • プロセス ID
于 2011-04-23T20:03:25.813 に答える