【发布时间】:2016-08-01 17:33:42
【问题描述】:
忘记支持这一点的语言,垃圾收集到底是什么?它是如何在编程语言中实现的?它是如何工作的,为什么它是有益的?为什么语言支持(和不支持)它?
【问题讨论】:
-
你读过wikipedia page吗?
标签: memory-management garbage-collection
忘记支持这一点的语言,垃圾收集到底是什么?它是如何在编程语言中实现的?它是如何工作的,为什么它是有益的?为什么语言支持(和不支持)它?
【问题讨论】:
标签: memory-management garbage-collection
您曾经使用过 C 编程语言吗?您可能会注意到,除非您提前知道需要多少内存,否则您必须分别执行malloc() 和free() 来获取和释放内存。如果您的语言为您做到这一点,那不是很酷吗?
进入垃圾回收。 GC 算法遍历当前使用的内存并删除未使用的内容。 Mark/Sweep 算法很容易学习它的工作原理。它标记当前正在使用的对象,然后清除不再引用或范围内的内容。这是有益的,因为现在您(程序员)不必担心内存处理! (顺便说一句,实际上不要使用 Mark/Sweep;截至 2016 年,Java 使用更细微的GC1 算法。您可以查看 Java 提供的所有 GC 算法here)
除非你仍然这样做。我可以编写一个技术上仍然可以访问内存的某些部分的数据结构,即使在语义上它是不可能的,也不会在代码的生命周期内完成。但这不是在编译时或运行时计算的,所以这部分未使用的内存仍然存在。我可能会说“任由 GC 处理”或更糟,我对 GC 完全一无所知,我只是随心所欲地制作对象。这会导致“内存泄漏”,这是垃圾收集首先要防止的!
至于为什么有些语言不支持它,要么它的开发者认为这是在浪费 CPU 周期,要么他们在编译时发现了内存泄漏(不知何故??),或者当该语言不知道好的 GC 算法时已创建。
【讨论】: