首页 > 其他分享 >挑战前端基础120题--垃圾回收机制?

挑战前端基础120题--垃圾回收机制?

时间:2024-04-24 12:11:22浏览次数:12  
标签:引用 变量 标记 -- 前端 回收 120 内存 垃圾

1. 什么是垃圾回收机制?

简称GC,内存管理自动运行,找到不被使用的变量,进行垃圾回收 释放内存;

补充点:JS变量分为:全局变量 & 局部变量; 全局变量的生命周期是一直存在直到页面被销毁。局部变量一般定义在函数内部,他的生命周期从函数被调用开始,直到函数运行结束。等到局部变量不被使用,就会被释放从而被垃圾回收;

2.为什么要进行垃圾回收?

为了防止内存泄漏,造成程序卡顿和奔溃;一般分为:意外的全局变量(对象的形式存在),被忘记的定时器或者回调函数,闭包,DOM泄漏;

3.如何实现?

2种实现方案:清除标记法 & 引用计数法

清除标记法:简单来说 垃圾回收机制会被所有不被使用的变量打上标记,然后回收他的内存;这也是大对数浏览器采用的方法;

  • 先找出所有的根结点(全局变量);
  • 运用算法 将所有的根结点 & 他们的字节点 标记为活跃。任何根结点不能访问的变量统一标记为垃圾;
  • 垃圾收集器释放所有未被标记为活跃的内存块,并将这些内存返回给操作系统;

   优点:实现简单 无非就是标记和不标记

   缺点:1. 内存碎片: 垃圾回收完后 剩余分配的变量内存空间位置不变,会导致剩余的内存空间变量不连续。出现内存碎片。

            2.分配新内存缓慢:当有一个新的变量需要分配内存size时,需要遍历剩余内存碎片,直到找到合适的size才会进行分配;有可能需遍历全部,还不一定能分配上;

后面新出的标记整理算法:和标记清除没有什么区别,只是在垃圾回收完后将剩余的变量 空间统一移动到一侧,解决了内存碎片的问题;

引用计数法:是判断有无引用指向该对象的地址,引用一次+1,等于0的就被回收;

优点:相比清除标记灵活,清除标记需要隔一段时间运行一次。 引用标记只要被标记为0就会自动被回收。

缺点:对象相互引用的时候(循环引用),即使后来不被使用了 也永远不会被标记为0。并且计数的方式需要一个计算器,占用内存位置。

4.v8引擎对于GC做了什么优化?

V8为了优化GC的全暂停时间,还引入了 增量标记 、 并发标记 、 并行标记 、 增量整理 、 并行清理 、 延迟清理 等方式。

我也还在学习中

5.深入:new Map()为什么也能被垃圾回收机制回收?

在JavaScript中, Map 对象存储的是键值对,其中键和值都可以是任何类型。 然而, Map 并不阻止其键(或值)被垃圾回收。 当没有其他引用指向一个对象时,该对象就可能被垃圾回收机制回收

标签:引用,变量,标记,--,前端,回收,120,内存,垃圾
From: https://www.cnblogs.com/sulishibaobei/p/18154760

相关文章

  • C++ 指针变量的字面量以及其所指对象的字面量
     指针变量的字面量以及其所指对象的字面量 #include<iostream>usingnamespacestd;intmain(){intvar=20;int*var_address;var_address=&var;cout<<"Valueofvarvariavle:"<<var<<endl;//Valueofvarv......
  • Pandas 2.2 中文官方教程和指南(十二)
    原文:pandas.pydata.org/docs/MultiIndex/高级索引原文:pandas.pydata.org/docs/user_guide/advanced.html本节涵盖了使用MultiIndex进行索引和其他高级索引功能。查看数据索引和选择以获取一般索引文档。警告在设置操作中返回副本还是引用可能取决于上下文。有时这被......
  • Pandas 2.2 中文官方教程和指南(十六)
    原文:pandas.pydata.org/docs/处理缺失数据原文:pandas.pydata.org/docs/user_guide/missing_data.html被视为“缺失”的值pandas使用不同的标记值来表示缺失值(也称为NA),具体取决于数据类型。numpy.nan适用于NumPy数据类型。使用NumPy数据类型的缺点是原始数据类型将......
  • word转pdf方案对比
    word转pdf方案对比Microsoftoffice套件基于Microsoftoffice需要安装office,跨平台收费Asposesdk收费,支持跨平台基于onlyoffice基于onlyoffice需要安装onlyoffice-documentserver,跨平台通过官方demo代码支持文件文件预览、在线编辑常用文件类型均支持安装部署为在线,耗......
  • Pandas 2.2 中文官方教程和指南(十三)
    原文:pandas.pydata.org/docs/写时复制(CoW)原文:pandas.pydata.org/docs/user_guide/copy_on_write.html注意写时复制将成为pandas3.0的默认设置。我们建议现在就启用它以从所有改进中受益。写时复制首次引入于版本1.5.0。从版本2.0开始,大部分通过CoW可能实现和支持......
  • Pandas 2.2 中文官方教程和指南(十七)
    原文:pandas.pydata.org/docs/重复标签原文:pandas.pydata.org/docs/user_guide/duplicates.htmlIndex对象不需要是唯一的;你可以有重复的行或列标签。这一点可能一开始会有点困惑。如果你熟悉SQL,你会知道行标签类似于表上的主键,你绝不希望在SQL表中有重复项。但pandas的......
  • 企业邮箱超大附件怎么发送?给你一个妙招
    随着文件体量越来越大,越来越多的企业需要发送邮箱超大附件,那么,企业邮箱超大附件怎么发送,才能又快又安全呢?今天就为大家解答一下。 首先,我们看看传统的邮箱发送附件会存在哪些问题:1、附件大小限制:大多数邮件系统对附件大小有限制,超出限制的文件无法通过邮件直接发送。2、服务......
  • Python GUI开发- PyQt5 开发小工具环境入门
    前言常见的python开发gui的库有Tkinter,PyQt5,wxPython等。本教程是选择PyQt5开发桌面小工具。环境准备只需pip安装即可快速准备好开发环境pipinstallpyqt5快速开始创建一个空的window窗口Qapplication():每个GUI都必须包含一个Qapplication,argv表示获取命令行参数,如果......
  • CPLEX运行*.cpo文件
    背景:我需要把手上的.cpo模型文件跑起来,但是官网上找了一大圈也没找到相应的方法,最后在一个论坛找到了一些蛛丝马迹。系统信息:Ubuntu22.04, IBM(R)ILOG(R)CPInteractiveOptimizer22.1.0.0解决方法1.启动Cplex的CP模块:在控制台输入`cpoptimizer`2.读取*.cpo文件:在控制......
  • jmeter有很多个接口需要用到token,怎么简单操作?
     一、实现方法添加HTTP请求默认值:在你的测试计划中,添加一个HTTP请求默认值配置元件(HTTPRequestDefaults),用于设置所有HTTP请求的公共属性,包括服务器地址、端口号等。你可以在这里设置token,以便在所有请求中都能使用它。获取token:在测试计划中,添加一个HTTP请求,......