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 进程,并提供以下信息:

  • 主类
  • 参数通过
  • 进程号
于 2011-04-23T20:03:25.813 回答