2

我想确定当前正在运行的 JVM。在JVMTI 文档中描述的函数的最佳情况下,但我找不到任何东西。


我的意思是这样的:VirtualMachine.list()提供:

[sun.tools.attach.WindowsAttachProvider@46ae506e: 2440 de.fu.profiler.view.MainFrame...

但它显示所有 JVM,而不是当前正在运行的 JVM。

4

5 回答 5

3

使用 Java 系统属性,例如

java.runtime.name=Java(TM) 2 Runtime Environment, Standard Edition
java.runtime.version=1.5.0_01-b08
java.specification.name=Java Platform API Specification
java.specification.vendor=Sun Microsystems Inc.
java.specification.version=1.5
java.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
java.version=1.5.0_01
java.vm.info=mixed mode, sharing
java.vm.name=Java HotSpot(TM) Client VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Sun Microsystems Inc.
java.vm.specification.version=1.0
java.vm.vendor=Sun Microsystems Inc.
java.vm.version=1.5.0_01-b08

使用java.lang.System.getProperties()getProperty(String name)

于 2011-04-07T15:59:30.493 回答
3

您可以从RuntimeMXBean获得一个唯一的名称。在大多数平台上,这包括当前进程的 processid。

于 2011-04-07T16:27:35.427 回答
0

jps(与 JDK 捆绑在一起的命令行工具)将列出当前正在运行的 Java 进程。

您可以使用 JMX 查找并附加到不同的正在运行的 Java 进程。

http://download.oracle.com/javase/1.5.0/docs/guide/management/agent.html

您将需要启用监控。

查找您当前的 PID 非常依赖于操作系统。这是一篇包含更多建议的博客文章:

http://blog.igorminar.com/2007/03/how-java-application-can-discover-its.html

以下是包含更多信息的链接:

Java 程序如何获得自己的进程 ID? http://www.google.com/search?q=find+current+java+process+id

于 2011-04-07T16:29:09.610 回答
-1

System.getProperty("java.runtime.name")做吗?

于 2011-04-07T16:01:40.243 回答
-1

JVM 没有与它的调用相关联的单一标识类,至少没有一个您可以轻松查询的标识类。

如果您使用的是 JVMTI,则可以识别您已连接到的 JVM 中正在运行的线程。可能有一个或多个线程,这取决于 JVM 是运行图形界面还是(例如)企业容器。对于给定的线程,您可以检查堆栈并识别正在调用的当前方法。如果您遍历堆栈,您可以决定父类是 JVM 的一部分(例如 java.lang. )还是特定于应用程序的类(例如 com.fun.)。这可以让您唯一标识正在检查的 JVM 的“目标”。

于 2011-04-07T16:18:16.340 回答