java - 有什么可能的方法来指定正在运行的java虚拟机的名称吗?

标签 java jvm jmx

出于某些特殊目的,我需要使用 ManagementFactory.getRuntimeMXBean().getName 来执行一些特殊的“if 语句”,例如从此方法返回的 String 值是否包含“Master”或“奴隶”。

那么当我启动java应用程序时可以指定这个值吗?

最佳答案

在我的 Windows 系统上,名称包含我的笔记本电脑的 PID 和主机名(例如“14576@DESKTOP-LEOJCPM”)。如果您想依赖操作系统的主机名,那应该可行。但每个 JVM 的行为可能有所不同。

查看API文档: “返回代表正在运行的 Java 虚拟机的名称。返回的名称字符串可以是任意字符串,并且 Java 虚拟机实现可以选择在返回的名称字符串中嵌入特定于平台的有用信息。每个正在运行的虚拟机可以有不同的名称”

引用号:https://docs.oracle.com/javase/8/docs/api/java/lang/management/RuntimeMXBean.html#getName--

该方法在 Sun VM 中的实现会导致 pid 和主机名的串联:

public String getVmId() {
    int pid = getProcessId();
    String hostname = "localhost";
    try {
        hostname = InetAddress.getLocalHost().getHostName();
    } catch (UnknownHostException e) {
        // ignore
    }
    return pid + "@" + hostname;
}

因此,如果不修改类以及虚拟机的行为,就不可能直接更改它。该方法也被用在其他地方。最好的建议是依赖额外的系统属性或主机相关配置。

参见:http://www.docjar.com/html/api/sun/management/VMManagementImpl.java.html

关于java - 有什么可能的方法来指定正在运行的java虚拟机的名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60989061/

相关文章:

java - 解释JVM方法调用指令

java - JMX 和两个网络接口(interface)

java - 在 Lucene 4 中,AtomicReader 和 CompositeReader 有什么区别

java - Spring、Hibernate、JUnit 带注释的实体

Java,让JTabbedPane弹出

java - 如果无法更改接口(interface),如何重构此方法?

java - JRE 与什么对话

java - 为什么.class文件的常量池表中没有列出一维数组类型?

java - 名称 [t3 ://127. 0.0.1 :7001/weblogic. management.mbeanservers.domainruntime] 未在此上下文中绑定(bind)。找不到 [t3:]

java - 如何编辑Weblogic启动脚本来启用JMX?