java - 如何在运行时查找堆/堆栈中对象的强引用数

标签 java c garbage-collection heap-memory

团队,

在 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/

相关文章:

Java用户输入,声明为int?

c - 传递任意大小的二维数组

c - 使用 malloc 和 POSIX 文件操作将文件读入动态内存数组

java - G1 垃圾回收导致变量值被重置?

java - 单元测试复合服务方法

Java:创建预定义颜色的数组

java - 无论操作系统如何创建文件和文件夹

c++ - 指向普通变量的常量指针

memory-management - 编译时如何实现引用计数器?

c# - 如何在调用进程退出或被杀死时优雅地结束线程?