何来尘埃飞舞丨 2020-11-05 15:48 采纳率: 0%
浏览 17

Java GC为什么不综合计数和根可达

计数会有循环引用的问题,而根可达会有浮动垃圾错标的问题,为什么不在使用计数的基础上使用根可达?这样如果一个对象计数为零就可以直接回收,而循环引用可以在下次GC时,无法根可达,然后判定为垃圾。这样不是更加高效吗?

  • 写回答

1条回答 默认 最新

  • AKA.Dennis.Li 2023-03-22 16:12
    关注

    摘抄书里的解释:

    1. 计数器方法容易产生误判
      计数器方法是一种基于引用计数的垃圾回收算法。该算法通过对每个对象进行引用计数,并在引用计数为零时回收该对象。然而,该算法存在一个严重的问题,即无法处理循环引用的情况。如果两个对象相互引用,它们的引用计数将永远不为零,因此这些对象永远不会被回收,导致内存泄漏。

    2. 根可达性分析更加准确
      根可达性分析是一种基于可达性分析的垃圾回收算法。该算法通过从一组根对象开始,遍历对象图并标记所有可达对象,在此过程中未被标记的对象即为垃圾对象。相比于计数器方法,根可达性分析不会产生误判,能够更加准确地识别垃圾对象,并及时回收。

    评论

报告相同问题?

悬赏问题

  • ¥20 双硬盘安装Ubuntu后windows 无法挂载硬盘
  • ¥15 帮我利用jupyter 运行一个正确的代码
  • ¥15 如何使用Gephi软件和Python包中的GephiStreamer交互
  • ¥15 sqlite加密问题咨询
  • ¥15 appdesigner接收不到udp组播的数据
  • ¥15 verilog 非阻塞赋值下的移位拼接错误
  • ¥100 两个按钮控制一个LED
  • ¥15 用C语言写离散数学相关问题
  • ¥30 如何用python的GephiStreamer连接到gephi中,把Python和Gephi的具体操作过程都展示,重点回答Gephi软件的调试,以及如果代码的端口在浏览器中无法显示怎么处理
  • ¥15 ansys机翼建模肋参数