Java 两个对象引用相互指向
在目标C中,两个不同的参照物可能相互指向对方 但是这在Java中可能吗?我的意思是,两个对象引用可以互相指向吗?如果可能的话,他们什么时候会被垃圾收集 在嵌套类的情况下,两个对象(内部类和外部类)相互链接—这些对象是如何被垃圾收集的?我假设您谈论的是循环引用。如果无法通过从GC根开始的链访问对象,Java的GC将其视为“垃圾”。即使对象可能相互指向以形成一个循环,但如果从根上断开,它们仍然符合GC的条件 Java中有四种GC根:Java 两个对象引用相互指向,java,Java,在目标C中,两个不同的参照物可能相互指向对方 但是这在Java中可能吗?我的意思是,两个对象引用可以互相指向吗?如果可能的话,他们什么时候会被垃圾收集 在嵌套类的情况下,两个对象(内部类和外部类)相互链接—这些对象是如何被垃圾收集的?我假设您谈论的是循环引用。如果无法通过从GC根开始的链访问对象,Java的GC将其视为“垃圾”。即使对象可能相互指向以形成一个循环,但如果从根上断开,它们仍然符合GC的条件 Java中有四种GC根: 局部变量通过线程堆栈保持活动状态。这不是真实对象虚拟参考,因此不可
当然,您可以让对象相互引用。您只需将这两个对象中的
指针传递给对方即可,这是完全有效的
但是,这并不意味着仍然可以从GC根目录访问对象。把它想象成一棵树。如果从主干上切断一个完整的分支,则整个分支都将丢失,无论涉及多少对象,或者有多少对象正在维护彼此的引用。是的,您可以这样做。像这样:
class Pointy {
public Pointy other;
}
Pointy one = new Pointy();
Pointy two = new Pointy();
one.other = two;
two.other = one;
当两个对象都没有被其他对象指向,或者其他对象从当前运行的代码中“无法访问”时,它们被垃圾收集。Java垃圾收集器是,这意味着它们可以发现此类问题
相反,系统(比如没有“现代”垃圾收集的Objective C——我不知道默认设置是什么)通常无法检测此类问题,因此对象可能会泄漏。对象引用只能指向对象。两个互相指向的对象引用是什么意思?哦!我是java新手!对于嵌套类,两个对象(内部类和外部类)相互链接。如果我说得通的话,这两个人怎么能把垃圾收集起来呢