gpt4 book ai didi

language-agnostic - 什么是解释垃圾收集如何工作的简单方法?

转载 作者:行者123 更新时间:2023-12-04 07:42:47 25 4
gpt4 key购买 nike

我的注意力持续时间很短,所以我无法通过 Wikipedia article .

我知道有几种垃圾收集技术,但一个常见的是“可达性”测试,其中一个对象的收集资格取决于它是否可以被有根对象“到达”(据我所知,这是一个已知不需要收集的对象)。当你想知道某个对象是否可达时,你会怎么做?你怎么知道在哪里看?

收集器显然必须知道所有分配的对象和根对象。它如何确定每个对象的可达性?

最佳答案

通过遍历指针/引用,我会说。原则上,您只需查看对象是否仍然有指向它的引用(来自其他对象、当前执行代码的局部变量……)。如果没有,则无法再次获得对该对象的引用(在 Java 之类的语言中,至少在您无法进行指针欺骗的情况下),因此通常可以安全地丢弃该特定对象。

其他使用(或仍在使用)的方案是例如引用计数,其中每个对象都有一个引用计数器,每次有人获得对该对象的引用时,该计数器必须递增,每次有人失去对该对象的引用时递减。如果我没记错的话,Windows 中的 COM 就是这样工作的。

Java 和 .NET 使用(除其他外)分代垃圾收集,其中每个对象最初都被假定非常快地消亡(分代假设)。然后它会进行一些优化以保持垃圾收集周期快速,从而不会中断运行过多的程序。在过去,GC 在程序运行时锁定程序的情况并不少见,有时锁定几秒钟。

除此之外,GC 通常只在内存不足时运行,即。 e.积累了太多的死物,需要回收。这就是为什么大多数托管应用程序与非托管应用程序相比似乎浪费更多内存的原因,即使在许多情况下,大部分内存可以通过运行一次 GC 来回收。

关于language-agnostic - 什么是解释垃圾收集如何工作的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/623423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com