我想确定当前运行的JVM。最好的情况是JVMTI Documentation中描述的功能,但我找不到任何东西。
我的意思是这样的:VirtualMachine.list()
提供:
[sun.tools.attach.WindowsAttachProvider@46ae506e: 2440 de.fu.profiler.view.MainFrame...
但是它会显示所有JVM,而不是当前正在运行的JVM。
答案 0 :(得分: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)
答案 1 :(得分:3)
您可以从RuntimeMXBean获取唯一名称。在大多数平台上,这包括当前流程的processid。
答案 2 :(得分: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
以下链接包含更多信息:
How can a Java program get its own process ID? http://www.google.com/search?q=find+current+java+process+id
答案 3 :(得分:-1)
请System.getProperty("java.runtime.name")
做什么?
答案 4 :(得分:-1)
JVM没有一个与其调用相关联的标识类,至少没有一个可以轻松查询的标识类。
如果您正在使用JVMTI,则可以识别已连接到的JVM中运行的线程。可能有一个或多个线程,具体取决于JVM是运行图形界面还是(例如)企业容器。对于给定的线程,您可以检查堆栈并确定当前调用的方法。如果迭代遍历堆栈,则可以确定父类是否是JVM的一部分(例如,java.lang。)或特定于应用程序的类(例如,com.fun。)。这可以让您唯一地标识正在检查的JVM的“目标”。