出于某些特殊目的,我需要使用 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/