java - Java 中是否有类似于 Swift 的强引用循环(或类似的东西)的概念?

标签 java swift variables

<分区>

在 Swift 中,非常强调强引用循环,以及避免它的不同方法。如果两个变量之间存在强引用循环,它们将永远保存在内存中,如果通过强引用循环将大图片或视频保存在内存中,会导致程序崩溃。

我只是想知道 Java 中是否存在这样的概念?是否有可能无意中创建类似于Java中强引用循环的东西?我有几个月的 Java 经验,但我从未听说过有人在 Java 中提到过这样的概念,尽管 Java 确实使用引用变量来指向对象。

最佳答案

似乎 swift 使用“引用计数”来检测对象的活跃度:每个对象都有一个与之关联的计数器,如果创建对该对象的新引用,该计数器就会递增;如果对该对象的引用消失,该计数器就会递减。如果引用计数为零,则对象已死,这意味着不再有对它的引用。

另一方面,Java 使用“可达性”来衡量活跃度:只要存在从某些“运行代码”到对象的引用链,对象就是活跃的。

两种方法各有利弊:

  • 引用计数让垃圾收集器的工作更轻松:只要看看引用计数,你就知道一个对象是否还活着
  • 另一方面,引用计数可以在其他死对象之间创建引用循环
  • 可达性意味着垃圾收集器必须从线程可以直接到达的对象开始,并遵循所有引用来标记 Activity 对象
  • 另一方面,可达性意味着引用循环没有问题:要么两个对象都可达,要么一个都不可达

关于java - Java 中是否有类似于 Swift 的强引用循环(或类似的东西)的概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39909781/

相关文章:

ios - 任何更改时 Xcode 8 自动构建

iOS频繁约束不断更新导致帧率下降

swift - 使用 PromiseKit 和 Alamofire 时跟踪进度

javascript - 检查 null 不适用于 ajax json 数据

java - Spring Boot Devtools 无法与 Tomcat Embed Jasper 配合使用

java - 谁能推荐一个 Java 或 Scala DOS/基于终端的 UI 框架?

php - session 未定义索引

xslt - 使用 xsl :choose 动态定义 XSLT 变量

java - 如何在java中获取当前的鼠标光标类型?

java - 通过GSON处理同名的多个属性