71得票2回答
垃圾回收器是否会调用Dispose()方法?

我认为如果您的程序没有调用Dispose,垃圾回收器(GC)最终会调用它,但您应该在程序中调用Dispose()以使清理具有确定性。 然而,从我的小测试程序中,我根本没有看到Dispose被调用....public class Test : IDisposable { static ...

71得票8回答
如何实现垃圾收集器?

有人可以指引我如何实现垃圾回收的好资料吗?我正在制作一个类似Lisp的解释型语言。它目前使用引用计数,但当然在释放循环依赖对象方面会失败。 我阅读了标记-清除、三色标记、移动和不移动、增量和停止-全局等内容,但是……我不知道在保持对象被分开成集合的最佳方式和同时将每个对象的内存开销最小的情况...

71得票5回答
什么是"根"?

垃圾回收中的根是什么? 我已经阅读了根的定义:"程序可以访问的任何引用",并且“活动对象”的定义是正在使用的对象,可以是局部变量、静态变量。 我有点困惑于区分根和活动对象之间的差别。 什么是根路径?根和活动对象如何工作? 有人能详细解释一下吗?

70得票12回答
由于.NET拥有垃圾回收机制,为什么我们还需要finalizers/destructors/dispose-pattern?

如果我理解正确,.net运行时将始终为我清理垃圾。因此,如果我创建新对象并在代码中停止引用它们,运行时将清理这些对象并释放它们占用的内存。 既然如此,为什么有些对象需要有析构函数或dispose方法呢?当它们不再被引用时,运行时不会自动清理吗?

70得票10回答
使用垃圾回收还是不使用垃圾回收

我最近看了两个非常不错的关于编程语言的演讲: 第一个演讲是由Herb Sutter进行的,他介绍了C++0x的所有优秀和酷炫的功能,解释了为什么C++的未来似乎比以往任何时候都更加光明,以及M$在这场比赛中被认为是好人。演讲围绕效率展开,并解释了如何通过尽量减少堆活动来提高性能。 另一个演...

69得票6回答
GC是否将内存释放回操作系统?

当垃圾回收机制运行并释放内存时,这些内存会返回操作系统吗?还是作为进程的一部分被保留?我一直坚信这些内存实际上从未返回到操作系统,而是作为内存区域/池的一部分被同一进程重新使用。 因此,一个进程的实际内存永远不会减少。提醒我的是一篇文章,Java的Runtime是用C/C++编写的,所以我想...

69得票3回答
年轻、终身和永久世代

我对堆、年轻代、老年代和永久代感到困惑。 请问有人可以解释一下吗?

69得票3回答
为什么gc()不释放内存?

我在一台64位Windows电脑上运行模拟,其具有64GB RAM。内存使用率达到55%,完成模拟后,我通过rm(list=ls())移除工作空间中的所有对象,然后进行double gc()。 我原以为这样就足够释放内存供下一次模拟运行使用了,但实际上内存使用率仅下降了1%。查阅了许多不同的...

68得票15回答
“Dispose” 方法只适用于包含非托管资源的类型吗?

最近我和同事就实现Dispose和实现IDisposable接口的类型的价值进行了讨论。 我认为对于应该尽快清理的类型,即使没有未受控资源需要清理,实现IDisposable也是有价值的。 我的同事持不同意见。他认为如果没有未受控资源,实现IDisposable是不必要的,因为您的类型最终会被...

67得票6回答
.NET 4.0中内存使用率非常高

我有一个C# Windows服务,最近将其从.NET 3.5迁移到了.NET 4.0,没有做任何其他代码更改。 在运行时使用3.5时,给定工作负载的内存利用率大约为1.5 GB,吞吐量为每秒20个X(在此问题的上下文中,X并不重要)。 完全相同的服务在4.0上运行时,内存使用量在3GB到5...