Возможно ли получить уникальный уникальный идентификатор для конкретного экземпляра 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 может быть восстановлен с центрального сервера.