【发布时间】:2017-02-16 00:18:11
【问题描述】:
在 Swift 中,非常强调强引用循环以及避免它的不同方法。如果两个变量之间存在强引用循环,它们将永远彼此保存在内存中,如果大图像或视频被强引用循环保存在内存中,则会导致程序崩溃。
我只是想知道Java中是否存在这样的概念?是否有可能无意中在 Java 中创建类似于强引用循环的东西?我有几个月的 Java 经验,但我从未听说有人在 Java 中提到过这样的概念,即使 Java 确实使用引用变量来指向对象。
【问题讨论】:
在 Swift 中,非常强调强引用循环以及避免它的不同方法。如果两个变量之间存在强引用循环,它们将永远彼此保存在内存中,如果大图像或视频被强引用循环保存在内存中,则会导致程序崩溃。
我只是想知道Java中是否存在这样的概念?是否有可能无意中在 Java 中创建类似于强引用循环的东西?我有几个月的 Java 经验,但我从未听说有人在 Java 中提到过这样的概念,即使 Java 确实使用引用变量来指向对象。
【问题讨论】:
似乎 swift 使用“引用计数”来检测对象的活跃度:每个对象都有一个与之关联的计数器,如果创建了对该对象的新引用,则该计数器会增加,如果对该对象的引用消失,则该计数器会减少。如果引用计数为零,则对象已死,这意味着不再有对它的引用。
另一方面,Java 使用“可达性”作为活跃度的衡量标准:只要存在从某个“运行代码”到对象的引用链,一个对象就是活跃的。
这两种方法各有利弊:
【讨论】: