Возможно ли получить уникальный уникальный идентификатор для конкретного экземпляра JVM?

Мне нужен способ однозначно и надолго идентифицировать экземпляр JVM из кода Java, запущенного в этой JVM.

То есть, если у меня есть два JVM, работающих одновременно на одной машине, каждая из них различима. Он также отличается от запуска JVM на других машинах и от будущих исполнений на одной машине, даже если идентификатор процесса повторно используется.

Я полагаю, что я мог бы реализовать что-то вроде этого, указав время начала, MAC-адрес машины и идентификатор процесса и каким-то образом объединив их. Мне интересно, есть ли какой-то стандартный способ достичь этого.

Обновление. Я вижу, что каждый человек рекомендовал UUID для всего сеанса. Это кажется хорошей идеей, хотя, возможно, слишком тяжелым. Вот моя проблема: я хочу использовать JVM id для создания нескольких уникальных идентификаторов в каждом исполнении JVM, которые каким-то образом включают экземпляр JVM.

Я понимаю, что вы не должны смешивать другие числа с UUID, потому что уникальность больше не гарантируется. Альтернативой является включение UUID в цепочку и ее цепочку, но затем она становится слишком длинной. Есть идеи по преодолению этого?

Ответы

Ответ 1

Вы можете создать UUID в начале вашей программы и использовать его во время выполнения программы.

UUID id = UUID.randomUUID();

Помимо метода randomUUID() существуют другие методы генерации UUID, которые могут лучше соответствовать вашим потребностям, см. документацию API класса java.util.UUID для получения дополнительной информации.

Ответ 2

Вы можете создать UUID при запуске приложения и использовать его для идентификации.

UUID UniqueID = UUID.randomUUID();

Ответ 3

Если UUID слишком тяжелые, вам нужно просмотреть, что вы подразумеваете под "уникальным и постоянным".

Например, если вы должны ограничивать "уникальные и постоянные" для обозначения уникальных для машин в данной сети и постоянные для следующего (скажем) 10 лет, вы можете использовать тот же подход, который используется в генерации UUID, но с меньшим количеством биты.

В качестве альтернативы, если вы должны создать уникальную службу генерации идентификаторов с постоянным хранилищем и привязать понятие "постоянный" к времени жизни этого хранилища, то уникальные идентификаторы могут быть просто инкрементной последовательностью целых чисел.

Ответ 4

Почему бы не использовать экземпляр Singleton, содержащий java.rmi.server.UID?

Ответ 5

Я не знаю стандартной библиотеки для этого, но вы можете зайти далеко по своему усмотрению со временем начала (выполните некоторые вычисления с новыми java.util.Date() и System.currentMillis), путь к установке, и путь к JVM (рассмотрим только конкатенацию всех System.getProperties()).

У вас есть центральный сервер, с которым можно поговорить? Затем uuid может быть восстановлен с центрального сервера.