有人可以解释一下垃圾收集是如何运作的吗?
(我正在使用C#和Java)。
答案 0 :(得分:8)
在一个简单的答案中涵盖了太复杂的主题。
以下是推荐阅读清单:
答案 1 :(得分:6)
垃圾收集背后的基本思想是你不必关心内存管理。 Garbage Collectod所做的是定期检查对象引用并找到不再使用的对象(不再引用)来回收它们的内存并压缩另一个。 垃圾收集器使用各种算法来执行他们的工作,并且它们在从一个语言到另一个语言的某些细节上有所不同。 维基百科为您提供了一个很好的starting point。 如果您正在寻找有关各种垃圾收集器(Java,.NET,..)的实际实现的更多深入信息,您可以查看here和here或搜索谷歌以获取更多信息。
答案 2 :(得分:3)
试用这本书Garbage Collection: Algorithms for Automatic Dynamic Memory Management。它不会有更新的东西,但它会让你在路上。
答案 3 :(得分:1)
Perfmon为GC相关性能提供了许多计数器......
答案 4 :(得分:0)
Here's a nice webcast that discusses simple mark-and-sweep (non-generational) garbage collection,有完美的动画来帮助理解这个概念。
答案 5 :(得分:0)
我认为您需要知道垃圾收集器是一个在您的程序上运行的线程,释放了引用使其无法访问的对象所占用的内存。您还需要知道无法预测int GC运行的时刻,您可以打电话给System.gc()
提出建议 GC要运行但不要让它运行 ,JVM会做出这个决定。
如果你有:
Object objectReference = null;
objectReference引用的对象是GC诱饵。 “隔离岛”的主题以及finalize(
)方法如何运作是有趣的主题。我建议快速谷歌搜索两者。