团队,
在 java 中是否有可能知道当前可用的对象有多少 Activity/强引用?
例如在下面的代码中; A 类的对象可以由项目中的许多类持有。但我想在监视器线程中打印它。
public class A {
public static A a = new A();
public static A getInstance() {
return a;
}
private A() {
new Monitor(this).start();
}
class Monitor extends Thread {
A refA;
public Monitor(A ref) {
this.refA = ref;
}
public void run () {
//TODO Print how many references currently available for Object A referenced by refA;
//Sure It will be minimum one. (which is "a" in this class A)
}
}
}
请不要太重视这个示例程序。我的问题是如何找到堆/堆栈中的对象有多少可用的强引用?唯一的好处是我们手头有一个针对该对象的强引用。
如果在java中不行;我可以将这个强引用传递给 C 语言吗?我可以从 C 语言做到这一点吗?
我只是想知道探查器/工具是如何做到这一点的? 请帮忙。
最佳答案
不,如果不更改 VM 上的类或分支工具,您将无法获得准确的计数(由于对性能的影响,这很难在生产中进行)。
使用 the ref package ,如果一个对象即将被丢弃(并在此时采取行动),您会收到通知,但没有可用的计数(并不总是由 VM 处理)。
关于java - 如何在运行时查找堆/堆栈中对象的强引用数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12529004/