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