在调试 Java 时破译变量信息

2022-09-02 10:30:45

我正在使用IntelliJ IDEA 8来调试一些Java,但这个问题可能适用于所有Java调试器。在变量列表中,它们显示为:

myVariable = {some.package.SomeClass@12345}

我对类名后面的数字感到好奇。数字到底是多少?如果两个变量是被引用的相同基础对象,它是否具有相同的编号?

提前致谢。


答案 1

这是 JVM 报告的 objectId,有关详细信息,请参阅 JDWP 规范

唯一标识目标 VM 中的对象。特定对象将在 JDWP 命令中由一个 objectID 标识,并在其整个生存期内(或直到显式释放 objectID)进行回复。除非已显式释放 ObjectID,否则不会重用 ObjectID 来标识其他对象,而不管引用的对象是否已被垃圾回收。对象 ID 为 0 表示空对象。请注意,对象 ID 的存在不会阻止对象的垃圾回收。任何尝试访问具有对象 ID 的垃圾回收对象都将导致INVALID_OBJECT错误代码。可以使用 DisableCollection 命令禁用垃圾回收,但通常不需要这样做。


答案 2