java - 本地主机上运行的 JVM 列表

标签 java

如何在 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/

相关文章:

java - 在内存中创建 mdb 副本时出错

java - Spring oAuth2并发请求死锁

java - 未报告的异常……必须捕获或声明抛出;尽管*抛出*关键字

java - 想要使用Web服务但 "cannot be resolved to a type"

java - 多个 Controller 共享的ExceptionHandler

java - 数组函数的时间复杂度

c# - 在 c# .Net 4 中替代 LoadingCache (guava)

java - SQL的IN子句中如何使用arraylist作为参数

java - 如何根据文本大小写独立获取对象

java - 当清除和重新加载java Hashtable时,内存是如何管理的