首页 > 系统相关 >Javascript中的内存(垃圾)回收机制

Javascript中的内存(垃圾)回收机制

时间:2023-06-13 11:25:47浏览次数:49  
标签:垃圾 变量 标记 Javascript 回收 引用 内存

JavaScript 具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行

常见的垃圾回收方式:标记清除引用计数方式。

一、标记清除方法

1、工作原理:【标记“离开环境”的就回收内存】

当变量进入环境时,将这个变量标记为“进入环境”。

当变量离开环境时,则将其标记为“离开环境”。

2、工作流程:

  • 垃圾回收器,在运行的时候会给存储在内存中的所有变量都加上标记;

  • 去掉环境中的变量以及被环境中的变量引用的变量(闭包)的标记;

  • 被加上标记的会被视为准备删除的变量;

  • 垃圾回收器完成内存清理工作,销毁那些带标记的值并回收他们所占用的内存空间

二、引用计数方法

1、工作原理:跟踪记录每个值被引用的次数

2、工作流程:

  • 声明了一个变量并将一个引用类型的值赋值给这个变量,这个引用类型值的引用次数就是 1

  • 同一个值又被赋值给另一个变量,这个引用类型值的引用次数加 1

  • 当包含这个引用类型值的变量又被赋值成另一个值了,那么这个引用类型值的引用次数减 1

  • 当引用次数变成 0 时,说明没办法访问这个值了;

  • 当垃圾收集器下一次运行时,它就会释放引用次数是 0 的值所占的内存。

标签:垃圾,变量,标记,Javascript,回收,引用,内存
From: https://www.cnblogs.com/le-fang/p/17476988.html

相关文章

  • 一文搞懂V8引擎的垃圾回收机制
    前言我们平时在写代码的过程中,好像很少需要自己手动进行垃圾回收,那么V8是如何来减少内存占用,从而避免内存溢出而导致程序崩溃的情况的。为了更高效地回收垃圾,V8引入了两个垃圾回收器,它们分别针对不同场景进行工作。如果这篇文章有帮助到你,❤️关注+点赞❤️鼓励一下作者,文章公众号首......
  • this 之谜揭底:从浅入深理解 JavaScript 中的 this 关键字(二)
    前言系列首发于公众号『前端进阶圈』,若不想错过更多精彩内容,请“星标”一下,敬请关注公众号最新消息。this之谜揭底:从浅入深理解JavaScript中的this关键字(二)调用位置在理解this的绑定过程之前,首先要理解调用位置:调用位置就是函数在代码中被调用的位置(而不是声明的......
  • linux内存回收策略
    1、64位操作系统进程可以最大申请多大的虚拟内存?64位操作系统的进程可以最大申请的虚拟内存取决于操作系统的架构和其对虚拟内存的管理方式。在理论上,64位操作系统可以支持非常大的虚拟内存空间。在大多数64位操作系统中,每个进程最大可以申请的虚拟内存大小通常为2^64字节,也就是......
  • linux占用内存查询 --------------Linux内存占用分析的几个方法
    Linux内存占用分析的几个方法原创 入门小站 入门小站 2023-06-0121:30 发表于湖北收录于合集#Linux804个入门小站分享运维技巧及10k+Stars的开源项目265篇原创内容公众号【Linux250个常用命令速查手册】关注【入门小站】,后台回复「1001」自取......
  • 根据进程查看内存使用情况
    根据进程查看内存使用情况使用以下命令找到进程ID(PID):psaux|grep<进程名>其中,“<进程名>”是您要查找的进程名称。此命令将返回相关进程的所有详细信息(包括PID、用户等)和进程名。在上面的输出结果中,查找目标进程的PID。执行以下命令,以使用PID来检索该进程的内存占用......
  • V8是如何执行JavaScript代码的?
    前言一般来讲,电脑是不能直接运行我们的javascript代码的,它需要一个翻译程序将人类能够理解的编程语言JavaScript,翻译成机器能够理解的机器语言。目前市面上有很多种JavaScript引擎,诸如SpiderMonkey、V8、JavaScriptCore等。而由谷歌开发的开源项目V8是当下使用最广泛的Ja......
  • 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法
    对象的属性其实就是数据,存放在堆中;而对象的行为(方法),就是运行逻辑,放在栈中堆区:专门用来保存对象的实例(new创建的对象和数组),实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在Stack中)1.存储的全部是对象,每个对象都包含一个与......
  • 在linux中使用内存映射(mmap)操作文件
    1,打开或创建文件,得到文件描述符,2,将内存中的数据以一定的格式和顺序写入文件,或者将文件中的数据以一定的格式和顺序读入到内存;3,关闭文件描述符;下边是按照常规方式操作固定格式的文件的方法,包含读写两个示例;1.#include<stdlib.h>2.#include<stdio.h>3.#include<unistd.h>......
  • Javascript考试复习
    登录页面<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>登录页面</title><style>html{background:#bde0ff;}form{text-align......
  • 【操作系统】【硬件结构】磁盘比内存慢几万倍?存储器的层次结构?
    1  前言大家如果想自己组装电脑的话,肯定需要购买一个CPU,但是存储器方面的设备,分类比较多,那我们肯定不能只买一种存储器,比如你除了要买内存,还要买硬盘,而针对硬盘我们还可以选择是固态硬盘还是机械硬盘。相信大家都知道内存和硬盘都属于计算机的存储设备,断电后内存的数据是会丢......