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执行完毕后已用的内存未用的内存之间靠一个指针维系着,该指针记录了下一次分配的起始点的位置,下一次为新对象进行内存分配时,可使用指针碰撞法进行分配相当的便捷高效。

  • 相关阅读:
    jmeter:dubbo接口测试
    聊聊基准测试的MVP方案
    建立团队的性能文化
    针对 Intellij IDEA 2018.2 版本 异常退出问题
    maven settings.xml配置优化
    Windows安装MySQL
    String的intern()方法详解
    Ubuntu下安装JDK图文教程详解 jdk-java6-30 .bin 的处理方法
    Iterator迭代器快捷键
    $.each $.map $.filter 区别 Script
  • 原文地址:https://www.cnblogs.com/xbfchder/p/11397510.html
Copyright © 2011-2022 走看看