当前位置: 首页 > 知识库问答 >
问题:

Dalvik JVM垃圾会收集我在其中执行代码和处理成员的非引用对象吗?

康锦
2023-03-14

我对这种情况是否危险有点困惑:

public SomeClass {

  public abstract class CallBackListener {
    public void abstract callback();
  }

  private CallBackListener mCb = null;
  private OrgObject mObject = null;

  public SomeClass() {
    mCb = new CallBackListener() {
      @Override
      public void callback() {
          mObject = null;
      }
    };
    mObject = new OrgObject(mCb);
  }
}

public class OrgObject {

  private SomeClass.CallBackListener mCb = null;

  public OrgObject(SomeClass.CallBackListener cb) {
    mCb = cp;
  }

  public void event() {
    //call callback
    cb.callback();

    //do other stuff
  }
}

提前致谢

共有1个答案

郑松
2023-03-14

没有;可由正在运行的线程访问的对象没有资格进行垃圾回收。

在执行属于对象的方法时,线程总是可以使用this引用(存储在线程执行堆栈中)访问对象本身,因此不能对其进行垃圾回收。当线程退出该方法时,如果没有其他对该对象的引用,则该对象可能是GC的。

 类似资料:
  • 问题内容: 我有两节课 假设我在代码中使用对象B [say ],并在最终使用它后将其设置为。我知道B的对象现在可用于垃圾回收了。 我知道在将b设置为null之后,它将 立即有资格 进行垃圾回收吗?但是类型A的对象呢?将B设置为以后,是否可以 立即 将其用于垃圾回收?还是 在B被垃圾回收之后 才有资格 进行 垃圾回收 ? 从理论上讲,在对B进行垃圾收集之前,还有参考吗?因此,SUN JVM编译器将在

  • 有人能给我解释一下原因吗?

  • [GC(分配失败)[defnew:10931K->472K(12288K),0.0053905秒]10931K->10712K(39616K),0.0054285秒][times:user=0.00 sys=0.00,real=0.01秒] [GC(分配失败)[defnew:10712k->472k(12288k),0.0057686秒]20952k->20952k(39616k),0.00580

  • 每个java开发人员都知道,java对象不再使用时将被垃圾收集。我想知道JVM如何识别必须为垃圾收集选择的对象。(例如,如果我有10个对象。如果对10个对象中的2个进行垃圾收集,jvm将如何找到这两个对象)。 JVM使用标记和扫描算法(如果我是对的)。 1)例如我在下面提供字符串对象场景 //现在s1

  • 问题内容: 希望是一个简单的问题。以循环链接列表为例: 现在,由于它是一个循环链接的列表,因此当添加单个元素时,它的下一个变量中将引用自身。删除列表中的唯一元素时,条目设置为null。是否需要将ListContainer.next设置为null以便Garbage Collector释放其内存,还是可以自动处理此类自引用? 问题答案: 仅依靠引用计数的垃圾收集器通常很容易无法收集诸如此类的自引用结构

  • 问题内容: 是否有可能使Go中的垃圾收集器处理并释放通过C代码分配的内存?抱歉,我之前没有使用过C和cgo,因此我的示例可能需要澄清。 假设您有一些要使用的C库,并且该库分配了一些需要手动释放的内存。我想做的是这样的: 当Go运行时中没有对* Stuff的引用时,垃圾收集器是否可以调用Stuff.Free()? 我在这里有意义吗? 也许更直接的问题是:是否有可能通过编写一个在该对象的引用为零时运行