Java如何解决垃圾收集中的保留周期?

 小变态徒 发布于 2023-02-05 11:20

我知道保留周期(至少在Objective-C和Swift中)是两个对象声称彼此拥有(它们彼此引用).在Objective-C中,我们可以通过声明其中一个来解决问题weak.

根据我的阅读和理解,Java GC不受保留周期的影响,我们不必担心weak引用.它是如何解决的?

2 个回答
  • 垃圾收集器从根开始查找可到达的对象(通常是:调用堆栈上的变量或全局变量)。因此,如果两个对象相互引用但无法通过其他方式访问,则它们不会被标记为“活动”,而是将被收集。

    2023-02-05 11:23 回答
  • Java垃圾收集器通过从对象树的根查找"可到达"对象来工作.如果无法访问它们(如果它们没有外部对象引用),则可以丢弃整个对象图.

    从本质上讲,它只是遍历树从根节点到叶节点,并标记它遇到的所有对象.未被堆中标记对象占用的任何内存被扫描(标记为空闲).这称为标记和扫描.img src

    标记并扫描行动

    这在objective-c中不能轻易完成,因为它使用引用计数,而不是具有缺陷的标记和扫描

    没有保留周期的原因是因为如果它们没有链接到任何地方的"树",它们就不会被标记并且可以被丢弃.

    2023-02-05 11:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有