jvm中的Java对象ID

Gor*_*ush 33 java eclipse debugging

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

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

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

Dim*_*eou 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).在所有情况下,您不必依赖Eclipse的内部对象ID,而是捕获id可以从对象本身派生的(或几乎).

  • +1我认为这是正确的,数字似乎由Eclipse调试器在内部分配和跟踪,比实际的JVM对象标识符更容易阅读和识别. (3认同)
  • 通常 - 我正在调试应用程序,并希望在进程运行期间有时收集一些关于对象的信息 - 在断点处停止并获取有关通过函数调用的对象路径的信息... (2认同)
  • 我也认为它们来自http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ObjectReference.html#uniqueID%28% 29 确实由 Eclipse 调试器实现。 (2认同)