【问题标题】:What is garbage collection and how does it work?什么是垃圾收集,它是如何工作的?
【发布时间】:2016-08-01 17:33:42
【问题描述】:

忘记支持这一点的语言,垃圾收集到底是什么?它是如何在编程语言中实现的?它是如何工作的,为什么它是有益的?为什么语言支持(和不支持)它?

【问题讨论】:

标签: memory-management garbage-collection


【解决方案1】:

您曾经使用过 C 编程语言吗?您可能会注意到,除非您提前知道需要多少内存,否则您必须分别执行malloc()free() 来获取和释放内存。如果您的语言为您做到这一点,那不是很酷吗?

进入垃圾回收。 GC 算法遍历当前使用的内存并删除未使用的内容。 Mark/Sweep 算法很容易学习它的工作原理。它标记当前正在使用的对象,然后清除不再引用或范围内的内容。这是有益的,因为现在您(程序员)不必担心内存处理! (顺便说一句,实际上不要使用 Mark/Sweep;截至 2016 年,Java 使用更细微的GC1 算法。您可以查看 Java 提供的所有 GC 算法here

除非你仍然这样做。我可以编写一个技术上仍然可以访问内存的某些部分的数据结构,即使在语义上它是不可能的,也不会在代码的生命周期内完成。但这不是在编译时或运行时计算的,所以这部分未使用的内存仍然存在。我可能会说“任由 GC 处理”或更糟,我对 GC 完全一无所知,我只是随心所欲地制作对象。这会导致“内存泄漏”,这是垃圾收集首先要防止的!

至于为什么有些语言不支持它,要么它的开发者认为这是在浪费 CPU 周期,要么他们在编译时发现了内存泄漏(不知何故??),或者当该语言不知道好的 GC 算法时已创建。

【讨论】:

    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多