gpt4 book ai didi

memory-leaks - 垃圾收集器会导致内存泄漏吗?

转载 作者:行者123 更新时间:2023-12-04 13:33:47 31 4
gpt4 key购买 nike

如果我有一个垃圾收集器来跟踪分配的每个对象并在它们不再具有对它们的可用引用时立即释放它们,您是否仍然存在内存泄漏?

考虑到内存泄漏是没有任何引用的分配不是不可能的还是我错过了什么?

编辑:所以我算作内存泄漏的是你在代码中不再有任何引用的分配。您仍然可以引用的大量累积分配不是我在这里考虑的泄漏。

我也只是在谈论最先进的 G.C.,已经有一段时间了,但我知道像循环引用这样的情况不会绊倒它们。我不需要任何语言的特定答案,这只是来自我与 friend 的对话。我们谈论的是 Actionscript 和 Java,但我不关心特定于这些的答案。

Edit2:从它的声音来看,似乎没有任何原因代码可以完全失去引用分配的能力并且没有 GC 能够捡起它,但我仍在等待更多的权重.

最佳答案

如果你的问题真的是这样的:

Considering a memory leak is allocations without any reference isn't that impossible or am I missing something?



那么答案是“是的,这是不可能的”,因为正确实现的垃圾收集器将回收所有没有事件引用的分配。

但是,您绝对可以在(例如)Java 中出现“内存泄漏”。我对“内存泄漏”的定义是仍然具有事件引用的分配(因此 不会被垃圾收集器回收 ) 但是 程序员不知道这个对象是不可回收的(即:对于程序员来说,这个对象已经死了,应该被回收)。一个简单的例子是这样的:

ObjectA -> ObjectB



在此示例中,ObjectA 是代码中正在使用的对象。但是,ObjectA 包含对 ObjectB 的引用,该引用实际上已死(即:ObjectB 已被分配和使用,现在从程序员的角度来看,已死)但程序员忘记将 ObjectA 中的引用设置为 null。在这种情况下,ObjectB 已经“泄露”了。

听起来不是什么大问题,但在某些情况下,这些泄漏是累积的。让我们想象一下 ObjectA 和 ObjectB 实际上是同一个类的实例。而程序员忘记将引用设置为 null 的问题,每次使用这样的实例时都会发生。最终你会得到这样的结果:

ObjectA -> ObjectB -> ObjectC -> ObjectD -> ObjectE -> ObjectF -> ObjectG -> ObjectH -> etc...



现在ObjectB到ObjectH都泄露了。像这样的问题(最终)会导致您的程序崩溃。即使使用正确实现的垃圾收集器。

关于memory-leaks - 垃圾收集器会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10577534/

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