美文网首页
前端面试-JS垃圾回收机制

前端面试-JS垃圾回收机制

作者: 令狐张豪 | 来源:发表于2019-08-18 20:38 被阅读0次

什么是垃圾回收机制?

JS的垃圾回收机制是为了以防内存泄漏,内存泄漏的含义就是当已经不需要某块内存时这块内存还存在着,垃圾回收机制就是间歇的不定期的寻找到不再使用的变量,并释放掉它们所指向的内存。

变量的生命周期

当一个变量的生命周期结束之后它所指向的内存就应该被释放。JS有两种变量,全局变量和在函数中产生的局部变量。局部变量的生命周期在函数执行过后就结束了,此时便可将它引用的内存释放(即垃圾回收),但全局变量生命周期会持续到浏览器关闭页面。

JS垃圾回收方式

JS执行环境中的垃圾回收器怎样才能检测哪块内存可以被回收有两种方式:标记清除(mark and sweep)、引用计数(reference counting)。

标记清除(mark and sweep)

大部分浏览器以此方式进行垃圾回收,当变量进入执行环境(函数中声明变量)的时候,垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”,在离开环境之后还有的变量则是需要被删除的变量。标记方式不定,可以是某个特殊位的反转或维护一个列表等。
垃圾收集器给内存中的所有变量都加上标记,然后去掉环境中的变量以及被环境中的变量引用的变量的标记。在此之后再被加上的标记的变量即为需要回收的变量,因为环境中的变量已经无法访问到这些变量。

引用计数(reference counting)

这种方式常常会引起内存泄漏,低版本的IE使用这种方式。机制就是跟踪一个值的引用次数,当声明一个变量并将一个引用类型赋值给该变量时该值引用次数加1,当这个变量指向其他一个时该值的引用次数便减一。当该值引用次数为0时就会被回收。

什么是‘可达性’?

简单地说,“可达性” 值就是那些以某种方式可访问或可用的值,它们被保证存储在内存中。

有一组基本的固有可达值,由于显而易见的原因无法删除。例如:
  • 本地函数的局部变量和参数
  • 当前嵌套调用链上的其他函数的变量和参数
  • 全局变量
  • 还有一些其他的,内部的

相关文章

  • 前端面试:谈谈 JS 垃圾回收机制

    摘要: 不是每个人都回答的出来... 原文:前端面试:谈谈 JS 垃圾回收机制 作者:前端小智 最近看到一些面试的...

  • JS 垃圾回收机制

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

  • 前端面试-JS垃圾回收机制

    什么是垃圾回收机制? JS的垃圾回收机制是为了以防内存泄漏,内存泄漏的含义就是当已经不需要某块内存时这块内存还存在...

  • 谈一谈JS的垃圾回收机制

    最近在前端面试的过程中,发现许多公司的基础题中,都会问到垃圾回收机制的相关问题,如说一说浏览器垃圾回收机制的方式,...

  • Javascript垃圾回收机制

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

  • JavaScript内存管理

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

  • JS垃圾回收机制

    JS中最常用的垃圾回收机制------标记清除 JS中最长用的垃圾回收机制是标记清除,当变量进入环境时,这个变量就...

  • 2018-10-13

    浅谈浏览器的垃圾回收机制和内存泄露 JavaScript使用垃圾回收机制来自动管理内存。 JS的回收机制分两种:1...

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

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

  • 闭包的理解。

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

网友评论

      本文标题:前端面试-JS垃圾回收机制

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