如何在 Java 6+ 中获取本地主机上正在运行的 JVM 列表及其规范(即 Java 版本、正在运行的线程等)?
Java API 是否提供此类功能?是否有可以执行此操作的 Java 库?
最佳答案
您可以使用 jps
,一个随 jvm 一起发布的命令行工具。不过,我不知道它有任何普通的 Java API。但是,JConsole 可以按照您的要求进行操作,所以我查看了它的源代码。这非常可怕,但在环顾四周时,我发现了对 jVisualVM 类的引用,当您指定 Java 6+ 时,这些类是可以看到的。这是我发现的:
这些类都在 sun.tools
中,所以首先你必须找到你的 JVM 附带的 jconsole.jar
(当然假设是 Sun JVM)和将它添加到您的类路径中。然后可以获得 Activity 虚拟机的快速列表:
public static void main(final String[] args) {
final Map<Integer, LocalVirtualMachine> virtualMachines = LocalVirtualMachine.getAllVirtualMachines();
for (final Entry<Integer, LocalVirtualMachine> entry : virtualMachines.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue().displayName());
}
}
一旦获得对 JVM 的引用,就可以使用 Attach API 与它们通信。 .
关于java - 本地主机上运行的 JVM 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5200269/