jvm中的Java对象ID

时间:2010-07-20 11:45:51

标签: java eclipse debugging

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

例如:28332是会话对象的ID。另一个示例:waiting for: (id=101)显示在“调试”面板中。这些ID既不是哈希码也不是System.identityHashCode

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

1 个答案:

答案 0 :(得分:27)

我认为它们内部有一个IdentityHashMap<Object, Integer>,为每个对象分配一个唯一的(但无意义的)整数。这应该是Eclipse调试器的内部(不是对象具有的特殊id)。你在问这个怎么样?

编辑:我会设置这样的断点(注意我不熟悉Eclipse):

  • 我会有一个初始断点(就像你用来拍摄截图的那个断点),然后打印我感兴趣的对象的System.identityHashCode(object)
  • 然后我会使用条件System.identityHashCode(object) == <whatever number you saw at the previous step>创建一个断点。停止错误的目标是非常罕见的。

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