一、GC的概念
        Garbage Collection 垃圾收集。JVM的垃圾回收机制使开发者不必过多考虑内存的申请与释放,这样降低了软件开发的成本和语言的学习成本。

二、GC算法
(1)引用计数法 
        这是一个老牌垃圾回收算法,通过引用计算来回收垃圾。引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。
GC算法与种类
        问题:
        第一、引用和去引用伴随加法和减法,影响性能;
        第二、很难处理循环引用。所谓的循环引用,其实是死循环,比如Object1与Object2互为引用,我们知道如果采用引用计数法,Object1和Object2将不能被回收,因为他们的引用计数无法为零。

(2)标记-清除算法
        它是现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。总结就是:标记存活的对象,然后把未标记的对象(垃圾对象)清除。
        问题:它的处理效率不高,会产生大量不连续的内存碎片。
GC算法与种类
(3)复制算法
        把内存空间划分为相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用的区域,把存活对象复制到另外一块survivor,然后把当前使用区域的剩余对象(垃圾对象)清除掉。
        它的复制成本比较小,而且也不会出去“碎片”问题。但缺点:就是需要两倍的内存空间。
GC算法与种类
 (4)标记-压缩算法
        标记-压缩算法适合用于存活对象较多的场合,如老年代。
        它结合了前2种算法的优点,分为2个阶段。第一阶段,标记出所有的存活对象;第二阶段,清除未标记的对象,并且把标记存活的对象“压缩”到堆的其中一块,按顺序排放。
        此算法避免了“标记-清除”的碎片问题,也避免了“复制”算法的空间问题。
GC算法与种类


相关文章:

  • 2021-06-25
  • 2021-10-23
  • 2021-12-27
  • 2021-06-28
  • 2022-12-23
  • 2021-11-13
  • 2021-07-10
猜你喜欢
  • 2021-06-17
  • 2022-01-18
  • 2022-01-09
  • 2021-05-03
相关资源
相似解决方案