什么是垃圾回收机制(超详细)

news2025/2/25 13:40:09

垃圾回收机制

        1.垃圾回收机制(Garbage Collction)简称GC,是JavaScript中使用的内存管理系统的基本组部分,是为了防止内存泄漏

        2.JavaScript是在创建变量(对象、字符串等)时自动进行了分配内存,并且在不使用他们时“自动释放。”

        3.内存在不适用的时候就被垃圾回收器自动回收

内存的生命周期

        JS环境中分配的内存,一般有如下生命周期:

        1.内存分配:当我们声明变量、函数、对象的时候,系统会自动为他们分配内存

        2.内存使用:即读写内存,也就是使用变量、函数等

        3.内存回收:使用完毕,由垃圾回收自动回收不再使用的内存

垃圾回收的算法说明

        所谓垃圾回收,核心思想就是如何判断内存是否已经不再会被使用了,如果是,就视为垃圾给释放掉

        下面介绍两种常见的浏览器垃圾回收算法:引用计数法标记清除法

        1.引用计数

        IE采用的引用计数算法,定义“内存不再使用”的标准很简单,就是看一个对象是否有指向它的引用

        算法

        1.跟踪记录每个值被引用的次数。

        2.如果这个值被引用了一次,那么就会被记录一次。

        3.多次引用会累加。

        4.如果减少一个引用就减1。

        5.如果引用次数是0,则释放内存。

        缺点:循环引用

        如果两个对象对象互相引用,尽管他们已不再使用,垃圾回收器不会进行回收,导致内存泄漏。

        2.标记清除法

        现代的浏览器已经不再使用引用计数法了

        现代浏览通用的大多是基于标记清除算法的某些改进算法,总体思想都是一致的

        核心:

        1.标记清除算法将“不再使用的对象”定义为“无法达到的对象”。

        2.标记:就是从根部(在js中就是全局对象)出发定时扫描内存中的对象。凡是能从根部到达的对象,都是还需要使用的。

        3.回收:那些无法由根部出发触及到的对象被标记为不再使用。

        

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web实训项目--网页设计(附源码)

1 实训基本信息 1.1 实训项目名称 网页设计 1.2 实训环境 本次实训的形式以实战讲解为主,以项目为主导。学习如何设计网页中的轮播图和动画效果,并掌握a标签文本内容跳转、超链接的应用、播放音乐与视频等操作。 2 实训内容简介 2.1 网页设计 通过…

关于vue中如何清除定时器的方法

一、问题 1、在vue中使用setTimeout定时器的时候,可能会遇到关不掉的情况,会存在明明已经在beforeDestroy和destroyed中设置了定时器清除了,但是有时候没生效,定时器还会继续执行。 2、在这里需要说一下setTimeout的使用场景&am…

路由vue-route的使用

文章目录一、项目初始化二、路由配置规则vue-route标签作用:路由匹配到的组件将渲染到这里router-link标签作用:路由导航(路由跳转的链接)三、声明式导航和编程式导航声明式导航编程式导航四、路由重定向五、嵌套路由特别注意总结…

04-vscode搭建cmake的编译环境

vscodemingw搭建C/C环境系列 01.vscodemingw搭建编译调试环境 02-vscode编译调试单个源文件程序 03-vscode编译调试多个源文件程序 04-vscode搭建cmake的编译环境 文章目录一、简述二、vscode搭建cmake的编译环境(方法1)1.配置cmake构建目录(可忽略)…

Redux——详解

一.初识Redux 相当于vue中的vuex 1.redux 是一个独立专门用于做状态管理的 JS 库(不是 react 插件库) 2.它可以用在 react, angular, vue 等项目中, 但基本与 react 配合使用 3.作用: 集中式管理 react 应用中多个组件共享的状态 看看Redux的工作原理图 如果要进行加一操作…

ES6---promise详解及用法

一、什么是Promise Promise是ES6异步编程的一种解决方案(目前最先进的解决方案是async和await的搭配(ES8),但是它们是基于promise的),从语法上讲,Promise是一个对象或者说是构造函数,用来封装异步操作并可…

炫酷登录注册界面【超级简单 jQuery+JS+HTML+CSS实现】

一:源码获取 这两天根据需求写了一个比较好看的有动态效果的登录注册切换页面,这里我将源码资源分享给大家,大家可以直接免费下载使用哦,没有 vip 的小伙伴找我私聊发送"登录注册"即可我给你发文件,此登录注…

四、vue中路由router配置详解

目录 一、vue中的路由作用 二、vue中的路由router 使用步骤 三、路由跳转 1、带参数路由跳转: (1)this.$router.push() : (2)this.$router.replace() : 2、不带参数路由跳转 3、this.…

【手把手教安装】VUE安装教程+VScode配置!!!

含泪整理Vue安装教程 因为换了新电脑很多软件要重装,所以想到可以写一份教程,为我以后换电脑方便重装也为了大家!! 第一次安装Vue踩坑太多,这里整理一份超详细教程(win11也可!!&…

uniapp 控制台警告 DevTools failed to load SourceMap: Could not load content for http://127.0.0.1问题解决

在uniapp中控制台警告,这是用于在开发时定位到报错的源码位置的工具SourceMap出问题了,如果单纯只是想消除这个警告的方法写在下面第一个,真正解决工具问题的方法是第二个(需要下载一个插件),现在放在这边做…

如何修复运行缓慢的 WordPress 网站?

💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网站】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 就其 SEO 而言&…

npm、nrm两种方式查看源和切换镜像

一、使用npm查看当前源、切换淘宝镜像、切换官方源 (1)npm查看当前源: npm get registry(2)npm设置淘宝镜像源: npm config set registry http://registry.npm.taobao.org(3)npm设…

2023 前端一场面试及答案整理

金三马上就要开始了,俗话说得好,知己知彼百战百胜,多准备总是没有错的。以面试的形式和大家一起学习、一起回顾我们的职场生涯。今天简单总结一下我个人去面试,包括我在面试别人时的经验。加油加加油!!&…

2022最新Nodejs下载安装配置步骤(保姆级教程)

1. 进入官网选择下载版本 http://nodejs.cn/download/2.安装过程 步骤1:选择next选项 步骤2:勾选接受协议选项,点击 next(下一步)按钮 : 步骤3:其默认安装目录是C:\Program Files\nodejs\,当…

【Python】ttkbootstrap的介绍与使用

一、什么是ttkbootstrap? 官方文档 [较慢]:https://ttkbootstrap.readthedocs.io/en/latest/ ttkbootstrap 是一个基于 tkinter 的界面美化库,使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序 二、安装步骤 安装命令…

Vue项目安装less和less-loader

第一步:查看webpack和webpack-cli是否安装 打开cmd,通过命令查看 webpack -vwebpack-cli -v如果没有安装,要先进行安装 可以通过 npm view webpack version / npm view webpack-cli version 查看当前webpack的最新版本 可以通过 npm vie…

什么是axios(写给小白的理解笔记)

0.为什么会诞生axios 最初浏览器页面向服务器请求数据时,返回的是整个页面,整个页面都会刷新,当我们只需要请求部分数据时,返回整个页面会造成网络资源的占用,为了提高数据请求效率,异步网络请求Ajax出现了…

羊了个羊网页版

最近羊了个羊火的不得了,利用周末时间实现一个网页版。步骤如下: 1,用reactjs 实现。 2,实现Gameroom类。 3,实现Card类。 4,通过父组件控制子组件通信方式,控制点击事件。 5,通过t…

nvm切换node版本

在实际的前端开发过程中,可能会经常遇见 node.js 的版本问题,不同的项目需要使用不同的 node.js 版本。比如Vue2和Vue3需要的Node版本不一样。 地址:https://github.com/coreybutler/nvm-windows/releases 注意:安装之前必须完…

ChatGPT初体验——震撼,好用,贾维斯已来

2022.12.26 大概一个月的使用体验,我觉得chagpt的使用还算远远超出我的想象,可以说只有你想不到的,最近需要写一个基于shell的学生选课系统,但是时间实在是紧张的很,一开始chatgpt是无法接受这么大的要求的&#xff0c…