Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaScript垃圾收集

JavaScript垃圾收集

作者头像
水击三千
发布于 2018-02-27 09:49:36
发布于 2018-02-27 09:49:36
6390
举报
文章被收录于专栏:水击三千水击三千

JavaScript具有自动收集垃圾的机制,也就是说执行环境会负责管理代码执行过程中的内存。JavaScript的内存分配以及内存的回收都是自动。垃圾回收机制:找到不再使用的变量,然后释放其占用的内存。

垃圾回收器会按照固定的时间间隔执行这一操作。

局部变量的生命周期,局部变量只在函数执行过程中存在,会为局部变量在栈(堆)内存上分配相应的空间,以便存储值。在函数中使用这些变量,直至函数执行结束。此时,局部变量就没有存在的必要了,可以释放他们的内存。在这种情况下,很容易判断变量是否还有存在的必要;但不是所有情况都很容易判断变量的存在。垃圾回收器会跟踪变量的使用情况,对于不再使用的变量将进行标记,以备将来回收。

标记清除

标记清除是垃圾回收器常用的策略,当变量进入环境时,就将这个变量标记为“进入环境”。从逻辑上将,不能释放被标记为“进入环境”的变量,因为执行流进入到环境,就可能会使用到这些变量。当执行流离开环境,则将变量标记为“离开环境”。

垃圾回收器在运行的时候会给存储在内存中的所有变量加上标记,然后去掉环境中的变量以及被环境中变量引用的变量的标记。再被加上标记的变量将被视为准备删除的变量。最好垃圾回收器完成内存清除工作,销毁带标记的值并回收内存空间。

垃圾回收器是周期性运行的,如果为变量分配的大量内存空间,那么内存的回收工作了也是相当大。

 内存限制问题不仅会影响变量的内存分配,同时还会影响调用栈以及在一个线程中能够同时执行的语句数量。因为,确保占用最少的内存,可以页面获得更好的性能。优化内存的方式,就是只保存必要的数据。数据不在使用的话,手动置为null,适用于大部分的全局变量。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaScript的GC机制
其实不管什么语言,都有一套垃圾回收机制。为什么要有垃圾回收机制?因为内存,程序运行需要内存,如果没有垃圾回收,那么内存占用就会越来越高,轻点说会影响性能卡顿,严重的直接导致崩溃。
wade
2020/04/24
5710
夯实JS系列--变量、作用域和内存问题
在ECMAScript中,变量分为基本类型和引用类型两种。 基本类型就是存储简单的数据段。而引用类型指的是那些可能由多个值构成的对象。 在ECMAScript中,基本类型包括:Undefined、Null、Boolean、Number和String。 这些基本类型的对象都是按值访问的。所以js中我们可以直接操作他们。 但是引用类型如Object等,是按照引用来操作的。并非直接操作其值。 并且我们可以动态的为引用类型变量添加属性和方法。而基本类型则不可以。
Nealyang
2019/09/29
7470
JavaScript 内存管理 & 垃圾回收机制
低级语言,比如C,有低级的内存管理基元,像 malloc(),free()。另一方面,JavaScript 的内存基元在变量(对象,字符串等等)创建时分配,然后在他们不再被使用时“自动释放”。后者被称为垃圾回收。这个“自动”是混淆并给 JavaScript (和其他高级语言)开发者一个错觉:他们可以不用考虑内存管理。
零式的天空
2022/03/22
5230
前端-JavaScript的内存问题
一直以来,对于Js的内存空间这部分的知识概念有些模糊,最近在回顾一些知识点的时候,特地的对js的内存这部分知识加深了一下理解,比如基本类型数据和引用类型数据在js内存中是怎么回事?什么是按值传递和按引用传递?以及对作用域和闭包的理解等等。
grain先森
2019/03/29
1.2K0
前端-JavaScript的内存问题
javascript垃圾收集机制与内存泄漏详解
javascript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中的使用的内存。而在C和C++之类的语言中,开发人员的一项基本任务就是手动跟踪内存的使用情况,这是造成许多问题的一个根源。在编写javascript程序时候,开发人员不用再关心内存使用的问题,所需内存的分配以及无用的回收完全实现了自动管理。这种垃圾收集机制的原理其实很简单:找出那些不再继续使用的变量,然后释放其中占用的内存。为此,垃圾收集器会按照固定的时间间隔(或代码执行中预设的收集时间),周期性的执行这一操作。 下面我们来
前朝楚水
2018/04/02
1.1K0
关于 JavaScript 作用域和闭包的思考
关于 javascript 闭包的一些思考 作用域 词法作用域 函数作用域 块作用域 闭包 什么是作用域? 作用域 什么是词法作用域? 词法作用域 什么是函数作用域? 函数作用域 在这个代
西南_张家辉
2021/02/02
4760
js垃圾回收与内存泄漏
JavaScript的垃圾回收机制是一种自动化的内存管理机制,用于检测和回收不再使用的内存资源,以便重新分配给其他需要的部分。JavaScript中的垃圾回收器负责跟踪和管理内存的分配和释放,使开发人员无需手动管理内存。
can4hou6joeng4
2023/11/17
2950
JavaScript 的内存泄露和垃圾回收
即跟踪记录每个值被引用的次数,当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1; 相反,如果包含对这个值引用的变量又取得了另外一个值,那么这个值的引用次数就减1;当引用次数变为0的时候,则说明没有办法再访问到这个值了,所以,就可以把其所占用的内存空间给收回来。 这样,垃圾收集器下次再运行时,他就会释放哪些引用次数为0的值所占的内存。
西南_张家辉
2021/02/02
3340
JavaScript垃圾收集
在很多语言中,开发人员的一项基本任务就是手动跟踪内存的使用情况,这是造成许多问题的根源。而 JavaScript具有垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存。因此在编写 JavaScript 程序时,开发人员不用在关心内存使用问题。
流眸
2021/04/08
5480
javascript中的内存管理和垃圾回收
  不管什么程序语言,内存生命周期基本是一致的:首先,分配需要的内存;然后,使用分配到的内存;最后,释放其内存。而对于第三个步骤,何时释放内存及释放哪些变量的内存,则需要使用垃圾回收机制。本文将详细介绍javascript中的内存管理和垃圾回收
xing.org1^
2019/05/25
7750
【JavaScript】垃圾回收与内存管理(内存优化)
Java和JavaScript都是是使用垃圾回收的语言,也就是说执行环境负责在代码执行时管理内存,通过自动内存分配管理实现内存分配和闲置资源回收。
CODER-V
2023/03/14
1.1K0
JS 垃圾回收机制
1、自动垃圾回收机制就是找出那些不再继续使用的值,然后释放其占用的内存空间。垃圾回收器每隔固定的时间段就执行一次释放操作。
grain先森
2019/03/29
2.8K0
JavaScript的内存管理
如果我们有内存溢出,程序占用的内存会越来越大,最终引起客户端卡顿,甚至无响应。如果我们使用Node.js做后端应用,因为后端程序会长时间运行,如果有内存溢出,造成的后果会更严重,服务器内存可能会很快就消耗光,应用不能正常运行。
蒋鹏飞
2020/10/15
7420
JavaScript的内存管理
《现代JavaScript高级教程》JavaScript引擎的垃圾回收机制
在编程语言中,内存管理是一项关键的任务,尤其对于构建大规模和性能敏感的应用程序来说尤为重要。然而,对于JavaScript这种动态语言来说,开发者通常不需要(也无法)直接管理内存,这项任务主要由JavaScript引擎来完成。
linwu
2023/07/27
3440
JavaScript 垃圾回收
JavaScript 具有自动垃圾回收机制,这种垃圾回收机制原理其实很简单:找出那些不再继续使用的变量,然后释放其所占用的内存,垃圾回收器会按照固定的时间间隔周期性地执行这一操作。局部变量只有在函数执行的过程中存在,在这个过程中,会为局部变量在栈(或者堆)内存上分配空间,然后在函数中使用这些变量,直至函数执行结束。垃圾回收器必须追踪哪个变量有用哪个没用,对于不再有用的变量打上标记,以备将来回收其占用的内存,用于标识无用变量的策略主要有标记清除法和引用计数法。
李振
2021/11/26
6100
JavaScript 垃圾回收
《JavaScript高级程序设计(第四版)》学习笔记(四)第4章
对于引用值而言,复制值得操作可以理解为复制了内存的引用,两个变量指向的是同样一块内存空间
小丞同学
2021/08/16
5490
JavaScript的垃圾回收机制
JavaScript是使用垃圾回收的语言,也就是很大的解决了跟踪内存对开发者造成的负担(毕竟这是很多问题的来源)。而卸下这个甜蜜的负担(一点也不甜蜜好嘛),通过自动内存管理实现内存分配和闲置资源回收。(下面会简单的讲述内存泄漏)
肥晨
2023/02/16
2.9K1
重学js之JavaScript 变量、作用域和内存问题
因此如果想要给一个变量赋值一个引用类型的值,那么则必须在堆内存中为这个值分配空间,由于这种值的大小不固定,因此不能把她保存到栈内存中,但是内存地址的大小是固定的,因此可以将内存地址保存在栈内存中。这样,在查询引用类型的变量时,就可以首先从栈中读取内存地址,在找到在堆内存中保存的值。这种访问方式叫做引用访问,因为我们不是操作的实际的值,而是被那个值引用的对象。
执行上下文
2022/07/26
8190
JavaScript(四)
ECMAScript 变量可能包含两种不同数据类型的值: 基本类型值和引用类型值。 之前我们说过,ECMAScript 有5种基本数据类型: Undefined、Null、Boolean、Number 和 String,以及一个引用数据类型: Object。 注意: 在很多语言中,字符串以对象的形式来表示,因此被认为是引用类型的。ECMAScript 放弃了这一传统。
1ess
2021/10/29
3790
JavaScript原生之垃圾回收原理、标记清理原理
JavaScript(通常缩写为JS)是一种解释性脚本语言(代码不进行预编译),主要用来向HTML页面添加交互行为。它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。
淼学派对
2022/11/20
4760
JavaScript原生之垃圾回收原理、标记清理原理
相关推荐
JavaScript的GC机制
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档