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

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

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

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

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

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

13
задан Uri 14 May 2010 в 14:24
поделиться

5 ответов

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

UUID UniqueID = UUID.randomUUID ();

4
ответ дан 1 December 2019 в 23:14
поделиться

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

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

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

2
ответ дан 1 December 2019 в 23:14
поделиться

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

1
ответ дан 1 December 2019 в 23:14
поделиться

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

UUID id = UUID.randomUUID();

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

11
ответ дан 1 December 2019 в 23:14
поделиться

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

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

1
ответ дан 1 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: