jvm中的Java对象ID

调试时,在Eclipse中对象值附近显示一个对象ID。

例如:28332是会话对象的ID。另一个示例:waiting for:

(id=101)显示在“调试”面板中。这些ID既不是哈希码,也不是System.identityHashCode

有人知道this吗-如何获取对象的ID?

回答:

我假设它们在内部具有IdentityHashMap<Object,

Integer>,为每个对象分配一个唯一的(但无意义的)整数。这应该在Eclipse调试器的内部(而不是对象具有的特殊ID)。您在问如何达到目标吗?

:我会这样设置断点(请注意,我不太熟悉Eclipse):

  • 我将有一个初始断点(就像您用来截屏的那个断点一样),并打印System.identityHashCode(object)我感兴趣的对象的。
  • 然后,我将使用condition创建一个断点System.identityHashCode(object) == <whatever number you saw at the previous step>。这种情况很少会停在错误的物体上。

或者,如果您感兴趣的对象具有toString()可以使用的适当表示形式,则也可以尝试使用代替System.identityHashCode(object)。在所有情况下,您都不必依赖Eclipse的内部对象ID,而是捕获id(或几乎)可以从对象本身派生的对象。

以上是 jvm中的Java对象ID 的全部内容, 来源链接: utcz.com/qa/425500.html

回到顶部