什么是垃圾收集?它是如何工作的?

时间:2016-08-01 17:33:43

标签: memory-management garbage-collection

忘记支持这个的语言,什么是垃圾收集?它是如何在编程语言中实现的?它是如何工作的以及它为什么有益?为什么语言支持(并且不支持)它?

1 个答案:

答案 0 :(得分:-1)

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

输入垃圾回收。 GC算法遍历当前使用的内存并删除未使用的内容。一个容易理解它是如何工作的是Mark/Sweep算法。它标记当前正在使用的对象,然后扫除不再引用的内容或范围内的内容。这是有益的,因为现在你(程序员)不必担心内存处理! (顺便说一句,实际上并没有使用Mark / Sweep;截至2016年,Java使用了更加细致的GC1算法。您可以看到所有可用的GC算法here

除了你还在做。我可以编写一个技术上仍然可以访问内存的某些部分的数据结构,即使从语义上讲它是不可能的,也不会在代码的生命周期内完成。但是这不是在编译时或运行时计算的,所以这些未使用的内存仍然存在。而且我可能会说"无论让GC处理它"或者更糟糕的是,我完全不知道GC,我只是随心所欲地制作物品。这会导致"内存泄漏",这就是垃圾收集首先要做的事情!

至于为什么某些语言不支持它,或者它的开发人员认为它浪费了CPU周期,或者他们在编译时发现内存泄漏(某种程度上??),或者没有好的GC算法在创建语言时就知道了。