我知道一个保留周期(至少在 Objective-C 和 Swift 中)是指两个对象声称拥有彼此的所有权(它们相互引用)。在 Objective-C 中,我们可以通过声明其中一个 weak
来解决这个问题。
根据我的阅读和理解,Java GC 不受保留循环的影响,我们不必担心弱
引用。它是如何解决的?
最佳答案
Java (JVM) 垃圾收集器的工作方式是从对象树的根部寻找“可达”对象。如果无法访问它们(如果它们没有外部对象引用),则可以丢弃整个对象图。
本质上,它只是从根节点到叶节点遍历树,并标记它遇到的所有对象。清除堆中未被标记对象占用的任何内存(标记为空闲)。这叫做 mark and sweep .图片来源
这在 objective-c 中不容易完成因为它使用 reference counting ,而不是标记和清除哪个has it's flaws
没有循环保留的原因是如果它们没有链接到任何地方的“树”,它们就不会被标记并且可以被丢弃。
关于java - Java是如何解决垃圾回收中的retain cycles的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20993746/