【发布时间】:2012-09-13 18:52:08
【问题描述】:
团队,
在 java 中是否有可能知道当前可用的对象有多少活动/强引用?
例如在下面的代码中; 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 语言中我可以做到这一点吗?
我只是想知道探查器/工具是如何做到这一点的? 请帮忙。
【问题讨论】:
-
我想在调用 getInstance() 后只有一个活动引用时执行一些操作。表示 getInstance() 的调用方方法在堆栈中结束。所以我们只有一个活跃的引用,即“a”。
-
看起来你需要某种 Aspect 能力,试试 AspectJ 或 Spring AOP。
-
您只需要“向上”侧翼还是两者都需要?我的意思是你需要做一些事情1)当计数从0变为1时,2)每次计数从0变为1,3)每次计数从X!= 1变为1?跨度>
标签: java c garbage-collection heap-memory