美文网首页
标记-整理算法

标记-整理算法

作者: 一蓬蒿人 | 来源:发表于2019-10-20 11:07 被阅读0次

定义

该算法分为标记和整理两个阶段,标记阶段会遍历并标记活动对象,整理阶段通过数次搜索堆来重新装填活动对象,它们聚集到了堆的一端。

lisp2算法

forwarding指针表示活动对象的目标地址

过程概要

  1. 初始状态


  2. 标记结束后


  3. 整理结束后


整理阶段伪代码

compaction_phase() {
    // 设定forwarding指针
    set_forwarding_ptr();
    // 更新指正
    adjust_ptr();
    // 移动对象
    move_obj();
}

// 第一次遍历堆
// $head_start 堆起始地址
// $head_end 堆结束地址
set_forwarding_ptr() {
    // 定义搜索堆的指针和指向目标地址的指针
    scan = new_address = $head_start;
    // 遍历堆,进行设置
    while (scan < $head_end) {
        // 若是活动对象,则设置forwarding指针
        if (scan.mark == TRUE) {
            scan.forwarding = new_address;
            new_address += scan.size;
        }
        scan += scan.size;
    }
}

// 第二次遍历堆
adjust_ptr() {
    // 更新根对象forwarding指针
    for (r : $roots) {
        *r = (*r).forwarding;
    }
    scan = $head_start;
    while (scan < $head_end) {
        // 更新子对象forwarding指针
        if(scan.mark == TRUE) {
            for(child : children(scan)) {
                *child = (*child).forwarding;
            }
        }
        scan += scan.size;
    }
}

// 第三次遍历堆
move_obj() {
    scan = $free = $heap_start;
    while(scan < $heap_end) {
        if(scan.mark == TRUE) {
            // 将找到的对象移动到 forwarding 指针的引用目标处
            new_address = scan.forwarding;
            copy_data(new_address, scan, scan.size);
            new_address.forwarding = NULL;
            new_address.mark = FALSE;
            $free += new_address.size;
        }
        scan += scan.size;
}

相关文章

  • 垃圾回收算法有几种类型? 他们对应的优缺点又是什么?

    常见的垃圾回收算法有: 标记-清除算法、复制算法、标记-整理算法、分代收集算法 标记-清除算法 标记—清除算法包括...

  • jvm内存管理--GC算法

    垃圾搜集的算法主要有三种,分别是标记-清除算法、复制算法、标记-整理算法。 标记/清除算法 标记:标记的过程遍历所...

  • 读书笔记-GC基础垃圾收集算法整理

    GC基础垃圾收集算法整理 简单概括如下4种算法: 标记-清除算法 复制算法 标记-整理算法 分代收集算法 对象死亡...

  • Java GC 的那些事(下)

    收集算法 垃圾收集算法主要有:标记-清除、复制和标记-整理。 1、标记-清除算法 对待回收的对象进行标记。 算法缺...

  • JVM读书笔记-垃圾回收算法-06

    垃圾回收算法一共分为四种 标记-清除算法、复制算法、标记-整理算法、分代收集算法 标记-清除算法标记清除算法是最开...

  • JVM:(GC)垃圾收集算法 学习笔记

    一.垃圾收集算法 类型 1.标记-清除 算法 2.复制 算法 3.标记-整理 算法 4.分代收集 算法 二.标记-...

  • 垃圾收集算法

    1.标记-清除算法 2.复制算法 3.标记-整理算法 4.分代收集算法

  • GC算法

    GC算法包括: 新生代: 标记清除算法(mark-sweep),复制算法(copying) 老年代:标记整理算法(...

  • JVM系列(四):浅谈常用四种垃圾回收算法总结!

    常用四种垃圾回收算法 常用的垃圾回收算法有四种:标记-清除算法、复制算法、标记-整理算法、分代收集算法。 1.标记...

  • 垃圾回收-GC

    1. 垃圾回收算法 垃圾回收算法包括引用计数算法、标记整理、标记复制、标记清除。 1). 引用计数算法 引用计数算...

网友评论

      本文标题:标记-整理算法

      本文链接:https://www.haomeiwen.com/subject/jxbomctx.html