zoukankan      html  css  js  c++  java
  • JVM的学习5_____垃圾回收:分代收集算法

    本文主要了解三种常用的垃圾收集算法:

    1. 标记清除-算法(Mark Sweep);
    2. 复制算法(Copying);
    3. 标记-压缩算法(Mark-Compact);

    1.标记-清除算法(Mark Sweep):

        此过程分为两个步骤:垃圾标记,垃圾清除。该算法相比于其他两个算法:执行效率低下,还容易产生内存碎片。

        但是由于老年代的生命周期比较长,使用复制清除算法操作的对象会比较多,所以老年代会使用标记清除算法。但是由于内存空间的碎片化比较严重大大降低了内存的使用率,因此标记压缩算法由此而生。

    2.复制算法:

        复制算法广泛的应用于新生代(由于新生代中对象的生命周期比较短暂)中,明显的提高的GC的执行效率。当执行一次Minor GC(新生代的垃圾回收)时,Eden中存活的对象和From中之前已经经历过一次Minor GC并且还继续存活的对象都会被复制到to区域中,以下两种情况对象会直接晋升到老年代中,一是当From中存活的对象的分代年龄超过阈值时会直接放进到老年代,二是当to中容量已满放不下时,会将部分对象放进到老年代。此时,Eden和From中就只剩了垃圾对象,就可以进行垃圾清理,释放掉其所占用的内存空间。接下来将ToSurvivor和FromSurvivor调换位置,必须保证一个Survivor空间是空的。这就是复制清除算法。

    3.标记-压缩算法:

        老年代的Full GC(也叫Major GC)使用的该算法,在标记处垃圾对象后,会将存活的对象方法到一个规整并连续的内存空间中,然后执行Full GC。当Full GC执行完毕后已用的内存未用的内存之间靠一个指针维系着,该指针记录了下一次分配的起始点的位置,下一次为新对象进行内存分配时,可使用指针碰撞法进行分配相当的便捷高效。

  • 相关阅读:
    94、二叉树的中序遍历 | JS
    102、二叉树的层序遍历 | JS
    111、二叉树的最小深度 | JS
    二叉树的先中后序遍历-JS非递归实现
    二叉树的先中后序遍历-JS递归实现
    深度和广度优先遍历-JS实现
    76、最小覆盖子串 | JS-字典
    extra1 二分查找与二叉判定树
    02 线性表的顺序存储
    原型、原型链、作用域、作用域链、闭包
  • 原文地址:https://www.cnblogs.com/xbfchder/p/11397510.html
Copyright © 2011-2022 走看看