C/C++教程

GC的了解

本文主要是介绍GC的了解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.GC的四种算法的原理与优缺点

  • 引用计数法
    每个对象都存在一个引用计数器。在被引用的时候,都会让计数器+1。当引用消失时,计数器-1。当GC时,引用为计数器为0的对象就是垃圾对象没有被使用,即被回收。
    缺点:如果两个对象相互引用,则无法被回收。类似于死锁。我拉着你,你拉着我,我们永远有引用。

  • 复制算法
    存在于年轻代中,当年轻代发生GC时,开始销毁eden区、幸存者0区(简称S0)和幸存者1区(S1)的对象。存活下来的对象会被打包到一起。一起分派到S0或S1中。S0与S1内存空间大小相等,每次都只能往一个区域分派,然后清空另一个区域。例如这次把存活对象放到了S0,那么S1的数据就会被清空。下次反之。一直如此的复制,交换。每次交换后,活下来的对象年龄+1。到了16次,送往养老区。
    优点:由于对象全体打包完一起放到一块区域,没有碎片,且性能较好。
    缺点浪费空间,永远有一个S0或S1空着,并且假设对象的存活率较大(例如有很多静态对象,无法回收),每次复制都是将那堆对象在翻来覆去的的复制。这时候效率就不高了。这里其实很像链表与数组的区别。数组有着连续的空间,十分整齐的排列。但是需要占用一块完整的空间。而链表是可以分散开的,有着前引用与后引用去寻址。

  • 标记清除法

  • 标记压缩

这篇关于GC的了解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!