标记-压缩算法
来源:互联网 发布:php技术有哪些 编辑:程序博客网 时间:2024/04/29 21:02
GC标记压缩算法由标记阶段和压缩阶段组成,标记阶段和标记-清除算法的完全一致
接下来,要搜索多次堆来进行压缩,压缩阶段通过数次搜索堆来重新装填活动对象
压缩阶段不会改变对象的排列顺序,只是缩小彼此间的空隙,使他们聚集到堆的一端
compaction_phase(){
set_forwarding_ptr() //设定forwarding指针
adjust_ptr() //更新指针
move_obj() //移到对象
}
1)它会搜索整个堆,给活动对象设定forwarding指针,假设初始阶段的forwarding指针为NULL
2)一旦找到活动对象,就将forwarding指针的引用目标从NULL指向new_address
3)通过对象copy把活动对象集中到堆的最左侧
优点:堆的利用效率高
缺点:需要多次搜索整个堆,所以,吞吐量较低(耗时较长)
#### Two-Finger算法:
1)移到对象:使用$free和$live两个指针开始搜索,free指针寻找非活动对象,live指针寻找活动对象,分别从堆的两端开始搜索,当free指向非活动对象,live指向活动对象时,交换空间,直到两个指针交叉,意味着搜索结束
2)更新指针,将指针的引用目标更新到移动后的对象
优点:
1)不用专门为forwarding指针留出域,不需要额外的内存空间
2)节省了一次堆的遍历搜索
缺点:
1)不考虑对象间的引用关系,一味压缩,使对象顺序发生很大的变化,具有引用关系的对象可能相距较远,没办法利用缓存了
2)它要求各个对象的大小必须一致,能消除这个限制处理的系统不多,所以限制了它的使用
0 0
- 标记-压缩算法
- GC算法实践(三) 标记-压缩算法
- java垃圾回收算法之-标记压缩
- 各种算法-标记-压缩(Mark-Compact)自适应
- java垃圾回收算法之-标记__清除_压缩
- 2.java编程实现压缩文法的等价变化--加标记算法
- 区域标记算法
- 区域标记算法
- 区域标记算法
- 标记-清除算法
- 标记 - 清除算法
- 连通分量标记算法
- 四色标记算法
- GC_2_标记-清除算法
- 压缩算法
- 压缩算法
- 压缩算法
- 压缩算法
- 【HTML5】图像裁剪
- TCP CDG算法与TCP Westwood算法
- 解题方法 暴力 to 归纳法
- js与jquery事件绑定联系与区别
- swift 学习资源 - Swift 语言指南
- 标记-压缩算法
- Linux 中必须要了解的命令操作
- 设计模式--->单例模式
- 查找在线主机的 IP 地址,让对方无处遁形!
- php英语单词大全95
- poj 3264 Balanced Lineup--RMQ问题模板题
- CentOS上编译OpenJDK8源码 以及 在eclipse上调试HotSpot虚拟机源码
- 海龟绘图-学习笔记4-function /函数
- 软件工程思想简单总结