在Swift中,人们非常重视强大的参考周期,以及避免它的不同方法。如果两个变量之间存在强大的参考周期,它们将永远保持在内存中,并且如果通过强引用周期将大图像或视频保存在存储器中,则会导致程序崩溃。
我只是想知道Java中是否存在这样的概念?是否有可能在Java中无意中创建类似于强引用循环的东西?我有几个月的Java经验,但我从来没有听说有人在Java中提到这样的概念,即使Java确实使用引用变量来指向对象。
答案 0 :(得分:7)
似乎swift使用“引用计数”来检测对象活跃度:每个对象都有一个与之关联的计数器,如果创建了对该对象的新引用则会递增,如果对该对象的引用消失则递减。如果引用计数为零,则对象已死,这意味着没有更多引用它。
另一方面,Java使用“可达性”作为活跃度量:只要存在从某些“运行代码”到对象的引用链,对象就是活着的。
两种方法都有利弊: