答案 0 :(得分:1)
该编号是存储对象引用的寄存器的寄存器编号。
什么是注册号?
从应用程序开发人员的角度来看,完全没有用的东西!我确定您知道运行Android应用程序的Dalvik VM。因此,Dalvik字节码中的帧由寄存器组成。这些寄存器存储对象引用。检查此链接以了解more。不知道为什么Android Studio在调试器中显示它们。我看不到有任何用途。
答案 1 :(得分:0)
简而言之:该数字不一定是寄存器号,它可能是ObjectReferenceImpl的ID,该ID是Java调试接口(JDI)的ObjectReference接口的实现。
长度:根据对Idea Community代码库ThreadDescriptorImpl.java
(ThreadDescriptorImpl)的分析,发现该类是负责提供要在其中显示的线程描述的类。调试窗口(请参阅上面随问题提供的图像)。该ID被称为thread.uniqueID()
。这里的线程是ThreadReferenceProxyImpl
类型的,它扩展了ObjectReferenceProxyImpl
,其中实现了uniqueID方法。该方法又从ObjectReference
类型的对象返回唯一ID。粗略搜索时,在Idea代码库中找不到符合条件的ObjectReference
定义。后来发现它隐藏在JDI接口的定义中。从Idea设置中找到的JDI实现jar中,发现ObjectReferenceImpl
提供了uniqueID
方法的最终实现。下面列出了代码段-
private long myID;
private static synchronized long nextID()
{
return nextID++;
}
ObjectReferenceImpl(VirtualMachine aVm, Oop oRef)
{
super(aVm);
this.saObject = oRef;
this.myID = nextID();
}
public long uniqueID()
{
return this.myID;
}
但是,这样说并回答问题时,使用了诸如“可能”和“可能是”之类的词,因为ObjectReference
实现的参考在Idea Community Edition源代码中没有立即找到。而且,这些推论来自jar的实现。如果将来要由查看此问题和答案的人提供直接参考,则可以修改答案以反映确定性。