突出显示的数字4580、4581等是什么意思?它们不是PID,这是用adb shell中的ps命令交叉检查的。
发布于 2018-10-03 01:24:27
简而言之:这个数字不一定是注册号,它可以是来自ObjectReferenceImpl的ID,后者是来自Java Debug interface (JDI)的ObjectReference接口的实现。
总而言之:通过对Idea社区代码库的分析,发现ThreadDescriptorImpl.java
(ThreadDescriptorImpl)是负责提供要在调试窗口中显示的线程描述的类(请参阅与问题一起出现的上图)。该ID称为thread.uniqueID()
。这里的线程是扩展ObjectReferenceProxyImpl
的ThreadReferenceProxyImpl
类型,其中实现了uniqueID方法。此方法反过来从ObjectReference
类型的对象返回一个uniqueID。粗略搜索后,在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;
}
然而,在这么说和回答这个问题时,使用了像“可能”和“可能是”这样的词,因为在Idea社区版的源代码中没有立即找到ObjectReference
实现的引用。而且,推论来自于jar实现。如果将来由查看此问题和答案的人提供直接参考,则可以修改答案以反映确定性。
https://stackoverflow.com/questions/52543967
复制相似问题