返回

GC——垃圾回收,辟地新天地

闲谈

GC(Garbage Collection)即垃圾回收,是指计算机通过自动检测并回收内存中不再使用的对象(变量)所占用的内存空间。GC存在的目的是避免内存泄漏,提高内存利用率和性能。

垃圾回收的概念

当程序执行时,会创建许多对象,这些对象占用了内存空间。当对象不再被程序使用时,这些内存空间就成为了垃圾,GC的任务就是回收这些垃圾,释放内存空间。GC的作用

GC的目的是为了避免内存泄漏,提高内存利用率和性能。内存泄漏是指由于程序设计不当,导致一些对象不再被程序使用,但它们所占用的内存空间却无法被回收,从而导致内存占用不断增加,最终导致程序崩溃。GC可以通过自动回收这些不再被使用的对象,来避免内存泄漏。同时,GC还可以提高内存利用率和性能。当内存空间不足时,GC会自动回收不再被使用的对象,从而释放内存空间,使程序能够继续运行。而当内存空间充足时,GC会暂停回收操作,从而减少内存回收带来的性能损耗。

垃圾回收算法

目前,主流的GC算法主要分为两大类:引用计数和标记清除。

  • 引用计数:引用计数法是一种简单的垃圾回收算法,它为每个对象维护一个引用计数器,当一个对象被引用时,引用计数器加 1,当一个对象的引用被释放时,引用计数器减 1。当一个对象的引用计数器为 0 时,说明该对象不再被程序使用,GC 会回收该对象所占用的内存空间。
  • 标记清除:标记清除法是一种更复杂的垃圾回收算法,它首先将所有对象标记为“未访问”。然后,它从根节点开始,逐个遍历所有可以从根节点访问到的对象,并将这些对象标记为“已访问”。在遍历过程中,如果遇到某个对象没有被标记,则说明该对象不再被程序使用,GC 会回收该对象所占用的内存空间。

除了引用计数和标记清除算法之外,还有许多其他的GC算法,例如分代回收算法、空间碎片整理算法等。这些算法都是为了解决不同场景下的垃圾回收问题而设计的。

GC的优缺点

GC是一种非常有用的技术,它可以帮助我们避免内存泄漏,提高内存利用率和性能。然而,GC也有一些缺点。

  • GC会带来额外的内存开销:为了实现GC,需要在每个对象中存储一些额外的信息,例如引用计数器或标记位。这些额外的信息会占用一些内存空间。
  • GC会带来性能损耗:GC需要定期执行垃圾回收操作,这会带来额外的性能损耗。在某些情况下,GC的性能损耗甚至会影响程序的正常运行。
  • GC可能会导致内存碎片:GC可能会导致内存碎片。当GC回收一个对象时,它会释放该对象所占用的内存空间。然而,这些内存空间可能不会被连续地释放,从而导致内存碎片。内存碎片会降低内存的利用率,并可能导致程序崩溃。

总结

GC是一种非常有用的技术,它可以帮助我们避免内存泄漏,提高内存利用率和性能。然而,GC也有一些缺点。在使用GC时,我们需要权衡GC的优缺点,选择适合我们项目的GC算法。