jvm中的Java对象ID

标签 java eclipse debugging

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

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

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

最佳答案

我想他们内部有一个 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 (或几乎)可以从对象本身派生。

关于jvm中的Java对象ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3289550/

相关文章:

java - Gson如何将json转换为自定义类

java - 如何使 JTextField (Eclipse Window Builder) 只读

java - 是否可以反编译和调试 Java 应用程序?

javascript - 如何在 Visual Studio Code 中调试单个 Nightwatch JS 测试

Perl 调试器 - 出错时中断(异常)?

javascript - 使用导入模块无法在 Chrome 开发工具中看到监视表达式

java - spring boot zuul错误的请求重定向

java - 如何在android中解码带有特殊字符(如 "&lt;span style=\&quot;color:#ff0000;\&quot;gt;")的utf-8编码字符串?

java - 匈牙利风格成员的 Eclipse 中的 getter 和 setter

java - 收集Java类信息