美文网首页
js垃圾回收

js垃圾回收

作者: 阿亮2019 | 来源:发表于2018-06-28 15:05 被阅读14次

像C语言这种偏底层的高级语言,是需要程序员手动申请和释放内存的,典型的用了 mallocfree 两种方法。

但是像java和js这种语言有垃圾回收机制。意味着程序员不需要手动的去操作内存。
常见的垃圾回收机制有两种:

引用计数算法

古老的垃圾回收方法,在IE浏览器上有内存泄漏,12年以后大部分现代浏览器都是基于标记清除算法的改良版。

引用计数: 当有引用指向这个对象时,则这个对象的引用计数加1,当引用失效时,则引用计数减1,当引用计数为0时,则表示可以进行垃圾回收了。

缺点:

  1. 无法解决循环引用的问题。
  2. 每次被引用时都需要更新引用数,会增加cpu的开销,即时现在内存是够用的。


    循环引用
    循环引用

标记清除算法

算法有两个阶段:

标记阶段:

在栈里面开始(栈里面保存的是堆空间地址),以这个为root元素,找到这个root元素关联的所有可访问的对象;刚开始的时候每个对象有个属性叫marked,值为false。如果能被root元素访问到,则将marked值置为true;


标记

清除阶段

遍历堆中的所有对象,找到所有marked值为false的对象,进行回收。
同时将那些marked值为true的对象重新置为false。

优点: 解决循环引用问题。

缺点:

  1. 效率低下: 因为需要递归标记 且 需要遍历堆中的所有对象。
  2. 垃圾回收时,主应用程序需要挂起。
  3. 会产生内存碎片。当应用程序需要大块连续空间的时候可能就分配不到。
内存碎片

参考链接
java垃圾回收算法之-标记清除
JVM内存管理–GC算法精解

相关文章

  • JS 垃圾回收机制

    从下面这几个方面简单介绍:JS 垃圾回收机制,几种?weakMap, WeakSet JS 垃圾回收机制, 标记清...

  • JavaScript内存管理

    JS内存回收 JS 有自动垃圾回收机制,就是找出那些不再继续使用的值,然后释放其占用的内存。 垃圾回收算法: 引用...

  • JS内存空间详解(摘录)

    js具有自动垃圾回收机制,垃圾回收的方法有两种:标记清除法、计数清除法 垃圾回收的实现算法: 垃圾回收器创建一个"...

  • 垃圾回收

    js的垃圾回收 原文:https://segmentfault.com/a/1190000018605776 垃圾...

  • js内存管理

    导读:js是高级语言,有自带的垃圾回收器,一般认为js开发可以不用关心内存管理。然而这是错误的。 js垃圾回收算法...

  • 闭包的理解。

    js的垃圾回收机制 当一个函数执行完,js引擎会回收不再使用的内存,闭包通过这个作用域的引用,阻止了垃圾回收。 什...

  • 垃圾回收

    垃圾回收一共分两种:栈中的垃圾回收和堆中的垃圾回收 栈中的垃圾回收 JS 引擎有一个记录当前执行状态的指针,称为 ...

  • Javascript垃圾回收机制

    简介 JS自带一套内存管理引擎,负责创建对象、销毁对象,以及垃圾回收。这期探讨一下垃圾回收机制。垃圾回收机制主要是...

  • js垃圾回收

    像C语言这种偏底层的高级语言,是需要程序员手动申请和释放内存的,典型的用了 malloc 和 free 两种方法。...

  • js 垃圾回收

    js 中垃圾回收机制 引用内存会一直存在,直到不被使用标记,人为清除如:设为 null、浏览器关闭、页面关闭 局部...

网友评论

      本文标题:js垃圾回收

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