我知道一个保留周期(至少在Objective-C和Swift中)是两个对象相互拥有所有权(它们相互引用)。在Objective-C中,我们可以通过声明其中之一ojit_code来解决该问题。
根据我的阅读和理解,Java GC不受保留周期的影响,我们不必担心weak
引用。如何解决?
最佳答案
Java(JVM)垃圾收集器通过从对象树的根中查找“可访问”对象来工作。如果无法达到它们(如果没有外部对象引用),则可以丢弃整个对象图。
本质上,它只是从根到叶节点遍历树并标记它遇到的所有对象。堆中未被标记对象占用的所有内存都将被清除(标记为空闲)。这称为mark and sweep。 img src
在objective-c中很难做到这一点,因为它使用reference counting,而不是标记和清除哪个has it's flaws
之所以没有保留周期,是因为如果它们没有链接到任何地方的“树”,则它们不会被标记并且可以被丢弃。