zoukankan      html  css  js  c++  java
  • copy GC 和 mark & compaction GC的算法异同

    copy GC是,对所有child子节点,判断,

    如果child没有被访问过,那么拷贝到新地址,child的forwording指向新地址,child标记为已访问,把自己对child的引用改为对新地址的引用。

    如果child已经被访问过,那么直接将对child的引用改为对child的forwording的引用,也就是对新地址的引用。

    m&c跟前者的区别是:并不是在另一块新内存上分配,而是在原有的内存分配,所以要先对最前面的存活对象进行分配,以保证不会被后来的覆盖,所以不能像copyGC那样图遍历一次搞定。

    过程是

    从root开始标记存活对象

    从内存地址最靠前的对象开始,根据大小,确定其地址

    从root开始,将对象对child的引用更改为新分配的地址

    从内存地址最靠前的对象开始,移动对象

    可以看出要遍历多次,而不是copyGC的遍历一次

    所以复制整理算法,比起copy算法,效率要低,吞吐量小。但是经过一次复制之后,还能存活的(比如A)在第二次就不需要再移动,而且不像copyGC需要担保什么的,空间利用率变高。

  • 相关阅读:
    js基础面试篇
    vue自定义指令
    vue兄弟节点通信
    vue----打包上线引用外部cdn
    vue----mockjs
    laravel database opearate1
    laravel seeding
    backtotop组件
    配置节流函数
    failed at the chromedriver@2.33.2 install script
  • 原文地址:https://www.cnblogs.com/chuliang/p/8689418.html
Copyright © 2011-2022 走看看