标记清除算法


function mark(p, level){
  if(level >3){
     return ;
  }

  if(typeof p == "object" && p != null && p.marked == undefined){

  p.marked = true;
  console.log(p);

  for(var prop in p){
     mark(p[prop], level+1);
  }
 }
}

var g1={name:"xiaoming"};

function func1(){
   return {name:"xiaohua"};
}

var l2 = func1();

mark(window, 1);

时间: 2024-10-15 17:04:11

标记清除算法的相关文章

GC标记-清除算法(Mark Sweep GC)

世界上第一个GC算法,由 JohnMcCarthy 在1960年发布. 标记-清除算法由标记阶段和清除阶段构成. 标记阶段就是把所有的活动对象都做上标记的阶段. 标记阶段就是"遍历对象并标记"的处理过程. 标记阶段经常用到深度优先搜索. 清除阶段就是把那些没有标记的对象,也就是非活动对象回收的阶段. 清除阶段collector会遍历整个堆,回收没有打上标记的对象(即垃圾). 内存的合并操作也是在清除阶段进行的. 分配 分配指将回收的内存空间进行再利用. -> 伪代码实现内存分配

CMS为什么采用“标记-清除”算法

分代式GC里,年老代常用mark-sweep:或者是mark-sweep/mark-compact的混合方式,一般情况下用mark-sweep,统计估算碎片量达到一定程度时用mark-compact.这是因为传统上大家认为年老代的对象可能会长时间存活且存活率高,或者是比较大,这样拷贝起来不划算,还不如采用就地收集的方式.Mark-sweep.mark-compact.copying这三种基本算法里,只有mark-sweep是不移动对象(也就是不用拷贝)的,所以选用mark-sweep. 简要对比

图解系列之垃圾收集标记-清除算法

原文地址:http://blog.51cto.com/4837471/2324571

jvm垃圾收集(标记-清除,复制,标记-整理,分代)算法

1. 标记 - 清除算法  标记清除算法是最基础的收集算法,其他收集算法都是基于这种思想.标记清除算法分为"标记"和"清除"两个阶段:首先标记出需要回收的对象,标记完成之后统一清除对象. 它的主要缺点:①.标记和清除过程效率不高 . ②.标记清除之后会产生大量不连续的内存碎片. . 2. 复制算法 它将可用内存容量划分为大小相等的两块,每次只使用其中的一块.当这一块用完之后,就将还存活的对象复制到另外一块上面,然后在把已使用过的内存空间一次理掉.这样使得每次都是对其

JVM垃圾收集算法(标记-清除、复制、标记-整理)

 [JVM垃圾收集算法] 1)标记-清除算法: 标记阶段:先通过根节点,标记所有从根节点开始的对象,未被标记的为垃圾对象(错了吧?) 清除阶段:清除所有未被标记的对象 2)复制算法: 将原有的内存空间分为两块,每次只使用一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未被使用的内存块中,然后清除正在使用的内存块中的所有对象. 3)标记-整理算法: 标记阶段:先通过根节点,标记所有从根节点开始的可达对象,未被标记的为垃圾对象 整理阶段:将所有的存活对象压缩到内存的一段,之后清理边界所有的空间

JVM--标记-清除算法Mark-Sweep

前言 垃圾自动回收机制的出现使编程更加的简单,使得我们不需要再去考虑内存分配和释放的问题,而是更加的专注在我们产品功能的实现上.但是我们还是需要花时间去了解下垃圾收集机制是怎么工作的,以便后面能够更好的进行我们应用的性能调优等. 目前最基本的垃圾收集算法有四种,标记-清除算法(mark-sweep),标记-压缩算法(mark-compact),复制算法(copying)以及引用计数算法(reference counting).而现代流行的垃圾收集算法一般是由这四种中的其中几种算法相互组合而成,比

Jvm(24),回收策略-----标记整理算法

标记/整理算法 标记/整理算法与标记/清除算法非常相似,它也是分为两个阶段:标记和整理.下面LZ 给各位介绍一下这两个阶段都做了什么. 标记:它的第一个阶段与标记/清除算法是一模一样的,均是遍历GC Roots,然后将存活的对象标记. 整理:移动所有存活的对象,且按照内存地址次序依次排列,然后将末端内存地址以后的内存全部回收.因此,第二阶段才称为整理阶段. 它GC前后的图示与复制算法的图非常相似,只不过没有了活动区间和空闲区间的区别,而过程又与标记/清除算法非常相似,我们来看GC前内存中对象的状

.NET实现Script标记清除功能代码

当今网页中经常使用到网页编辑器,因为人们需要在网页中插入图片,视频,样式等html代码内容,这使得网页的信息更加丰富.随之而来的,也给程序开发者带来了不少麻烦,因为提交的html中难免会出现不安全标记和非法标记,比如script,比如未知标签.这需要我们编写大量的程序代码去分析指定用户提交的html信息安全性,标准性. 方法1: 今天我要给大家推荐一个组件,他可以智能的分析出代码的出错部份和清除出错部份,并且配置比较简单.他的名字叫SafeHelper,通过配置文件设定的标记外,他将清楚和检查出

python 关于循环引用以及标记清除的问题

关于引用计数会出现的两个问题以及解决方案当一个变量引用计数为零时,cpython的垃圾回收机制就会回收这个变量 1 在循环引用的情况下,引用计数就不好事了,这时候就需要用到标记清除 循环引用的危害: 会造成内存溢出,因为循环引用计数不可能为零 解决方法: 标记清除 2 关于标记清除的效率问题(低) 引用计数引用一次就加1,值减到0以后就应该被回收,那这里就产生了一个问题 cpython的垃圾回收机制不是无时无刻都在运行的,是隔一段时间运行一次,这里就会产生一个效率问题 为了保证效率cpython