问题标签 [garbage-collection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
312 浏览

language-agnostic - 垃圾收集和运行时类型信息

fixnum 问题让我想到了另一个我想了很久的问题。

许多关于垃圾收集的在线资料并没有说明如何实现运行时类型信息。因此,我对各种垃圾收集器了解很多,但并不真正了解如何实现它们。

fixnum 解决方案实际上非常好,很清楚哪个值是指针,哪个不是。还有哪些其他常用的存储类型信息的解决方案?

另外,我想知道 fixnum -thing。这是否意味着您仅限于每个数组索引上的 fixnums?或者是否有某种解决方法可以获得完整的 64 位整数?

0 投票
15 回答
699 浏览

.net - 垃圾收集器的意义何在

建议上面的代码应该包含try/catch(或using),这样如果抛出异常,所有资源都会被正确处理。

但是如果你不得不担心手动处理东西,那么 GC 的意义何在?!GC 不是为编码员处理这个问题吗?

0 投票
2 回答
15990 浏览

c# - C# WPF 中的内存泄漏

我可以使用一些建议来追踪 C# 中内存泄漏的原因。我了解什么是内存泄漏,并且知道它们为什么会在 C# 中发生,但我想知道您过去使用过哪些工具/策略来解决它们?

我正在使用.NET Memory Profiler,我发现我的一个巨大的主要对象在我关闭它管理的窗口后仍留在内存中,但我不确定如何处理它的所有链接。

如果我不够清楚,只需发布​​一个问题的答案,我将编辑我的问题作为回应。谢谢!

0 投票
16 回答
14675 浏览

c++ - C++ 中的垃圾收集——为什么?

我一直听到人们抱怨 C++ 没有垃圾收集。我还听说 C++ 标准委员会正在考虑将其添加到该语言中。恐怕我只是不明白它的意义......使用带有智能指针的 RAII 消除了对它的需要,对吧?

我唯一的垃圾收集经验是在几台便宜的 80 年代家用电脑上,这意味着系统每隔一段时间就会死机几秒钟。我确信从那以后它已经有所改善,但正如你所猜想的那样,这并没有让我对它有很高的评价。

垃圾收集可以为经验丰富的 C++ 开发人员提供哪些优势?

0 投票
16 回答
157555 浏览

c# - 在 C# 中强制垃圾回收的最佳实践

根据我的经验,似乎大多数人会告诉您强制垃圾回收是不明智的,但在某些情况下,您正在处理大型对象,这些对象并不总是在 0 代中被回收,但内存是一个问题,是可以强制收集吗?是否有这样做的最佳实践?

0 投票
9 回答
1759 浏览

language-agnostic - 垃圾收集可以与显式内存管理共存吗?

例如,假设在 C# 4 中包含一个“删除”关键字。由于基于引用的系统,是否可以保证您永远不会有野指针,但仍然能够依赖垃圾收集器?

我可以看到它可能发生的唯一方法是,如果不是对内存位置的引用,而是对指向实际对象的指针表的索引。但是,我确信在某些情况下会破坏,并且有可能破坏类型安全/具有悬空指针。

编辑:我说的不是.net。我只是以 C# 为例。

0 投票
2 回答
1173 浏览

objective-c - Objective-C 垃圾回收中的自有对象

我想知道处理在内存管理代码中对象不属于任何特定所有者的情况的推荐方法是什么,即对象自己释放。一个这样的例子可能是 NSWindowController 的子类,它配置、显示和管理单个窗口的输入和输出。控制器对象显示一个窗口并稍后在某个时候释放自己(通常在它管理的窗口或工作表关闭时)。AppKit 也提供了几个例子: NSAnimation 在 startAnimation 中保留自己并在动画完成时释放自己。另一个例子是 NSWindow,它可以配置为在关闭时释放自己。

在自己实现这些“自有”对象时,我看到至少三种不同的 GC 安全模式,但它们都有一些缺点。

一种)。使用 CFRetain/CFRelease。

自有对象在开始其操作之前调用自身的 CFRetain(例如,在窗口控制器示例中,在窗口显示之前)。然后它在完成后调用自身的 CFRelease()(例如,在窗口关闭后的窗口控制器示例中)。

优点:对象的用户不必担心内存管理。
缺点:有点难看,因为需要使用内存管理功能,尽管我们在纯 ObjC 代码中使用 GC。如果没有调用 CFRelease(),泄漏可能很难定位。

乙)。避免使用静态数据结构的自我所有权习语。

对象在开始操作之前将自己添加到数据结构(例如静态可变数组)中,并在完成后将自己从那里移除。

优点:对象的用户不必担心内存管理。不调用内存管理函数。对象有明确的所有者。潜在的泄漏很容易找到。
缺点:如果可以从不同的线程创建对象,则需要锁定。额外的数据结构。

C)。通过要求对象的用户保存对对象的引用(例如,保存到 ivar)来避免自有习惯用法。

优点:不调用内存管理函数。对象有明确的所有者。
缺点:对象的用户必须保留一个引用,即使它不再需要该对象。额外的 ivars。

你会使用什么模式来处理这些情况?

0 投票
3 回答
2725 浏览

c# - 我的 BackgroundWorker 实例何时会被垃圾回收

考虑这个代码块

一切都很好,但我想了解为什么对象(工作者、视图和更新)没有被垃圾收集

0 投票
8 回答
15751 浏览

.net - 我应该什么时候在 .NET 中处理我的对象?

对于一般代码,我真的需要处置一个对象吗?我可以在大多数情况下忽略它,还是在您 100% 确定不再需要它时始终处置它是个好主意?

0 投票
4 回答
4437 浏览

.net - 如何对 IDisposable 进行单元测试?

我正在研究一段库代码IDisposable。托管路径 (via using) 易于测试。不过,我想知道终结器:调用System.GC.Collect()足以强制终结器运行吗?