Как получить уникальный идентификатор JVM? - PullRequest
12 голосов
/ 29 ноября 2011

Как код Java может получить уникальный идентификатор для JVM, в которой он работает?В системе Unix примером того, что я ищу, может быть PID процесса, в котором работает JVM (при условии сопоставления «один к одному» между JVM и процессами).

Ответы [ 2 ]

10 голосов
/ 29 ноября 2011

Один простой способ создания уникального идентификатора для каждой JVM - запустить статический ServerSocket, для которого выбран порт 0, по которому он захватывает любой свободный порт.Поскольку никакие две ServerSockets (JVM или иным образом) не могут существовать на одном и том же порту, все они будут уникальными, и вы можете запросить его для номера порта.Поскольку он статический, в JVM будет только один.

Это зависит от того, какие у вас есть разрешения, но в большинстве случаев он работает просто отлично, и вы всегда можете привязать его к «127.0.0.1», чтобы сделать егоменее вероятно, что вы столкнетесь с любыми ограничениями.

static ServerSocket myssock;
static int myid;

static {
    myssock = new ServerSocket(0);
    myid = myssock.getLocalPort();
}

Если у вас есть несколько JVM на нескольких хост-машинах, вы можете комбинировать вышеперечисленное с IP-адресом локальной сети, чтобы создать уникальный идентификатор JVM в сети.*

7 голосов
/ 19 сентября 2017

Мы использовали:

import java.lang.management.ManagementFactory;
String jvmName = ManagementFactory.getRuntimeMXBean().getName();

, что дает что-то вроде <pid>@<hostname>, по крайней мере в JVM Sun / Oracle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...