是否有可能为特定的 JVM 实例获取真正唯一的 ID?

2022-09-04 02:18:00

我需要一种方法来唯一且永久地从该JVM中运行的Java代码中识别JVM的实例。

也就是说,如果我在同一台机器上同时运行两个JVM,那么每个JVM都是可区分的。它还可以与其他机器上运行JVM以及将来在同一机器上执行(即使重用进程ID)区分开来。

我想我可以通过识别开始时间,机器MAC和进程ID并以某种方式组合它们来实现这样的东西。我想知道是否有一些标准的方法来实现这一点。

更新:我看到每个人都建议整个会话使用UUID。这似乎是一个好主意,尽管可能有点太重量级了。这是我的问题:我想使用JVM id在每个JVM执行中创建多个唯一标识符,这些标识符以某种方式合并了JVM实例。

我的理解是,您不应该将其他数字混合到UUID中,因为不再保证唯一性。另一种方法是将 UUID 设置为字符串并将其链接起来,但随后它变得太长。有什么想法可以克服这一点吗?


答案 1

您可以在程序开始时生成 a,并在程序运行期间使用它。UUID

UUID id = UUID.randomUUID();

除了该方法之外,还有其他方法可以生成可能更适合您的需求,有关详细信息,请参阅类的 API 文档。randomUUID()UUIDjava.util.UUID


答案 2

您可以在应用程序启动时创建一个 UUID,并将其用于标识。

UUID UniqueID = UUID.randomUUID();


推荐