从javaScript数据类型开始了解垃圾回收机制

一、 javaScript数据类型

javaScript 数据类型分为:基本数据类型引用数据类型

基本数据类型

分类:Number、String、Boolean、Null、Undefined、Symbol。
存储地址:栈。

引用数据类型

分类:Object、Array、Function。
存储地址:堆。

二、存储地址

特点:小、速度快、有序。
通常情况下,栈的内存空间不会设置很大(因为栈空间是用来存放执行上下文的,如果栈空间设置的很大,会影响切换执行上下文的速度),栈一般用于存储一些 原始类型 的小数据。

特点:大、速度慢、无序。
堆的内存空间很大,常用于存储类似 引用类型 的这样的大数据。
在这里插入图片描述

三、垃圾回收机制

栈内存如何回收

当函数在执行时,有一个记录当前执行状态的指针(ESP)指向它。
在这里插入图片描述
当此函数被执行结束后,ESP指针指向下一个执行函数。虽然此时上一个函数还存在于占内存中,但下一个函数的执行可能会覆盖掉它。

堆内存如何回收

这里主要介绍:V8引擎的垃圾回收机制。

原理:

1、内存划分

引擎将堆内存分为两个部分:新生代老生代

新生代:存放生存时间较短的对象 -------由副垃圾回收器回收。
老生代:存放生存时间较长的对象 -------由主垃圾回收器回收。

2、副垃圾回收器

副垃圾回收器将 新生代内存空间 分为两个部分:对象区域空闲区域

新加入的对象都会被放入对象区域,当对象区域快满的时候,执行一次回收。

注意:如果对象区域很大,每次清理的时间就会很长,所以对象区域一般都很小,但也很容易被放满。所以经过两次垃圾回收之后依然存活的对象会被放入老生代

回收过程:副垃圾回收器对 对象 区域中的垃圾进行标记,标记完成之后,进入垃圾清理阶段,并将活跃的对象移入空闲区域(这时候会出现许多内存不连续的空白区域),同时还会把他们有序的排列起来,这个排列的过程就相当于做了内存整理。执行完上述操作后,再将 对象区域 与 空闲区域 的的角色相调换。

3、主垃圾回收器

主要采用 标记清除法 进行垃圾回收。

标记
从一组根元素开始,递归遍历这组根元素,在遍历过程中能够被遍历到的元素成为活动对象,没有被遍历到的元素则是垃圾数据。

清除
问题1:因为主垃圾回收器主要用来回收内存区域大,存储数据大的垃圾,所以如果对所有的垃圾数据依次清除,会带来很多的内存碎片。
解决:标记整理(在标记的过程中,将所有活跃的对象都向一边移动,最后清除掉边界以外的垃圾)。

问题2:JavaScript 是运行在主线程之上的,一旦执行垃圾回收算法,都需要将正在执行的 JavaScript 脚本暂停下来,待垃圾回收完毕后再恢复脚本执行,非常的耗时。
解决:让垃圾回收操作和js脚本交替执行(类似时间片)。

思考:闭包之所以会带来内存泄漏的问题,主要是因为不能对其变量进行垃圾回收,如何解决这个问题呢?
答案:使用完内存变量后,将此变量指向null。

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

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

相关文章

直播中那几秒延时到底来自哪?

7月16日,亚太内容分发大会上,阿里云高级产品运营专家俞翔受邀出席,并分享了基于CDN网络构建超低延时直播的场景实践。以下为演讲原文。 近几年,直播带货已经逐渐走进大众视野。在今年上半年受疫情原因影响,直播营销市…

三探云原生全景图,这次聊聊运行时层

在《俯瞰云原生,这便是供应层》我们介绍了云原生全景图的最底层:供应层,本文将带大家了解运行时层,这一层包含了容器在云原生环境中运行所需的一切。作者 | Catherine Paganini,Jason Morgan来源 | K8sMeetup社区头图 …

SpringCloud应用在Kubernetes上的最佳实践—开发部署

作者 | 孤弋 阿里云高级技术专家,负责 EDAS 的开发和用户体验优化工作。 导读:在上一篇文章《SpringCloud 应用在 Kubernetes 上的云上实践 - 开发篇》中讲到可以通过两个工具,轻松地将一个 SpringCloud 应用从初始化到本地运行。本篇文章&a…

解决谷歌浏览器 google chrome 安装插件报错:Download interrupted,不支持 .crx 文件下载

最近给 新的 macBook Pro 2020 笔记本的 chrome 浏览器安装 react developer tools 时(翻墙情况下),安装总是不成功,有一个弹框提示:Download interrupted。 一开始我以为是第三方插件出了问题,于是我去安…

低代码,让人人都可以是开发者

作者:流水不争先 来源| 技术领导力(ID:jishulingdaoli)头图 | 下载于视觉中国今年2月23日,外国低代码平台提供商Creatio宣布获得6800万美元融资;2月22日,国内SaaS软件厂商黑湖智造宣布完成C轮近5亿元人民币融资。国内外…

秒懂云通信:选云通信到底哪家强?

原文链接 本文为云栖社区原创内容,未经允许不得转载。

H5 中 IOS 系统如何获取浏览器真正的内核

当我们使用 navigator.userAgent 获取 当前浏览器的用户代理,一般通过正则表达式 就可获取到对应的浏览器内核。但是 问题:在ios系统下,无论我们下载什么浏览器(chrome、火狐…),其内核都是safari。 原因…

有效的云安全态势始于三个步骤

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 公共云的采用如今持续增长,到今年年底,预计将有83%的企业工作负载都在云平台中。云计算增加的灵活性和…

妥了!微服务治理的困难,用 Serverless 来解决

作者 | 王科怀(行松)来源 | Serverless头图 | 下载于视觉中国微服务治理面临的挑战在业务初期,因人手有限,想要快速开发并上线产品,很多团队使用单体的架构来开发。但是随着公司的发展,会不断往系统里面添加…

建网站应该选择自己建站还是在线建站?

一、什么是网站? 网上关于网站的定义很多,在此就不想重复了,简而言之网站就是创建者使用技术手段搭建,从而让访客可以通过域名访问并进行互动的互联网页面组合。 通常网站由四个部分组成: 1、域名: 也就…

SVG图片以 https 链接的方式展示在页面上,并且可继承父类的颜色大小(类似阿里巴巴iconfont)

一、背景与问题 1. 背景 在前端的项目开发过程中,我们经常使用到 字体图标库(iconfont),以 ant dezign 为例。 如果在遇到图标库不存在的图标时,我们往往采用自定义图标的方式: 引入自定义的svg图&…

云原生高可用技术体系构建

伴随着互联网业务的高速发展,越来越多的线下场景需要转移到线上,而线上业务的量级也在飞速增长,给互联网业务的技术架构带来了严峻的挑战,原来的“一体机数据库”的方式已经不适用于当前的主流业务,越来越来的业务开始…

容器技术在企业落地的最佳实践

作者 | 易立 阿里云资深技术专家 导读:近年来,容器技术及相关应用得到了国内外越来越多的关注度。在国外,容器技术已经形成了较成熟的生态圈;而在国内,金融企业、互联网企业、IT 企业积极投入容器技术的应用。本文将重…

上手 Docker 容器,不应该是个问题

来源 | 无敌码农责编 | 寇雪芹头图 | 下载于视觉中国在微服务时代,服务数量及规模越来越大,服务的部署及运维的模式如果仍然采用传统方式就会大大增加运维成本。所以微服务时代的运维方式一定是Devops模式,通过构建自动化运维发布平台来打通产…

vue+node前后端分离接口调用(初学者)

一、node编写接口 (设定你已使用Nodeexpress搭建好了项目,可参照我的上一篇博客) 我们就在users.js下进行接口编写 router.get(/getUserInfo,function(req,res,next){var user new User();//解析路由参数var params URL.parse(req.url, tr…

一款App基于mPaaS小程序如何进行改造?

这篇故事围绕着一款 App 基于 mPaaS 小程序进行改造娓娓展开。 作为国内校园服务场景最丰富的平台,笑联 App 已覆盖国内 130 所高校,服务近百万高校学生。 截止目前,笑联 App 内的 12 个业务模块目前已顺利实现小程序化。不仅获得媲美原生应用…

隐秘的角落里数亿场AI战争正在发生

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! "科技领域不做安全风控,就等于造汽车的时候没有做刹车。”蚂蚁集团首席AI科学家漆远这样形容安全风控的地位…

锐捷发布极简以太全光解决方案 打造“不一样”的全光网

3月9日,锐捷网络举办以“不一样的全光网”为主题的媒体发布会,正式对外发布新一代全光网络解决方案——极简以太全光解决方案(以下简称极简光方案)。这个方案正是面向不断升温的全光网络市场需求,针对教育、制造、医疗…

写给迷糊的你看的 浏览器从输入URL到页面渲染过程(呕心泣血 1.6w字)

第一步:用户输入 1、 对用户所输入内容进行解析: 为什么需要解析:判断出所输入的关键字是 搜索内容 还是 URL 搜索内容:地址栏会使用浏览器默认的搜索引擎,来合成带关键字的 URL URL:输入内容符合 URL 规则…

在Saas发展的黄金时代里带你理解SaaS设计

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 导读:软件即服务(英语:Software as a Service,SaaS),亦…