JavaScript 内存管理

server/2024/10/18 18:26:58/

   JavaScript内存管理主要涉及到堆(Heap)和栈(Stack),以及任务队列(Task Queue)和调

用栈(Call Stack)。

  1.堆(Heap)

  •     存储对象与分配的动态内存。
  •     当你创建一个新的对象{},数组[],或者任何其他复杂类型时,它们会被分配在堆上。

2.栈(Stack)

  •   存储基本类型数据(如Numbers, Strings, Booleans, Null, Undefined)和指向堆上对象的指针
  •   当你创建一个变量并将一个原始值赋值给它时,如let a = 5;,这个值会被存储在栈上。
  •   调用函数时,函数的环境(包括局部变量)会被推入调用栈。

3.任务队列(Task Queue)

  • 存储异步操作的回调,如setTimeout, setInterval, Promise, Fetch等。
  • 当这些异步操作完成时,其回调函数会被推入任务队列等待执行。

4.调用栈(Call Stack)

  • 当JavaScript运行时,它会按顺序执行调用栈的函数。

  • 当执行完所有同步代码或遇到异步操作时,会将控制权交给浏览器的事件循环

  在JavaScript中,调用栈(call stack)是一个存储函数调用的地方,其中JavaScript引擎使用这个栈来管理代码执行的顺序。当调用函数时,它会被添加到调用栈的顶部。当函数执行完毕并返回时,它会从调用栈的顶部移除。

  当调用栈达到最大大小时,会引发"栈溢出"错误。这通常发生在无限递归或处理大量的同步调用时。

  在浏览器环境中,当调用栈为空时,事件循环开始运行。事件循环是JavaScript运行时的一部分,它处理各种事件(例如用户的点击,API调用的返回,setTimeout的时间到达等),当这些事件处理完毕后,它将控制权交还给调用栈,继续执行代码。

JavaScript 的内存管理主要是通过垃圾回收机制来自动处理的,其中最著名的垃圾回收算法是引用计数和标记清除。

  1. 引用计数: 当一个对象被创建时,系统会记录有多少变量指向这个对象,如果这个数量降到0,那么这个对象就会被垃圾回收器回收。但是这种方法有一个问题,就是循环引用,如果两个对象相互引用,那么这两个对象的引用计数永远不会降为0,因此这种方法在现代浏览器中已经不再使用。

  2. 标记清除: 这是现代浏览器使用的垃圾回收算法。工作原理是,当代码执行过程中,运行环境会追踪哪些变量正在被使用,然后在执行垃圾回收时,清除未被追踪的变量。

在JavaScript中,可以使用new关键字创建对象,使用delete操作符删除对象的属性,或者将对象的引用设置为null来手动释放内存


http://www.ppmy.cn/server/130480.html

相关文章

前端_003_js扫盲

文章目录 var,let,const严格模式数据类型运算符事件常用对象函数绑定call() ,apply(),bind() 闭包浏览器中事件循环回调和异步Promiseasync和await DOMBOMAjax var,let,const let是var的升级版本,对于块作用域,var无法进行限制,let不会存在该…

AttributeError: module ‘numpy‘ has no attribute ‘float‘

这个错误是因为在 NumPy 1.20 版本中,np.float 这个别名已经被弃用了。它原本是内置 float 类型的别名,但经常引起新手的混淆。为了解决这个问题,你应该按照以下步骤修改代码: 将 np.float 替换为 float,这不会改变任…

【hadoop报错】JAR does not exist or is not a normal file

1. 环境 linux Ubuntu hadoop 执行 hadoop jar 命令时,一直报错 解决方法 2、确定自己的jar目录是切实存在的 /export/server/hadoop-3.3.6/shares/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.6-tests.jar 3、网上找了很多解决办法,最后…

常见IDE及其编译器的讲解

IDE 意思是:集成开发环境 常见的IDE有哪些? eg. devC,VS2022,xcode,codeblocks,clion常见编译器有哪些? eg.msvc,gcc,clang微软的底层编译器是msvc苹果的底层编译器是clang IDE编译器特点devC集成了gcc小巧,工具简单&…

第十一章 RabbitMQ之消费者确认机制

目录 一、介绍 二、演示三种ACK方式效果 2.1. none: 不处理 2.1.1. 消费者配置代码 2.1.2. 生产者主要代码 2.1.3. 消费者主要代码 2.1.4. 运行效果 2.2. manual:手动模式 2.3. auto:自动模式 一、介绍 消费者确认机制(Consume…

⽂件操作详解

本章讲述的是有关文件的相关内容,本章我们会认识到什么是文件,二进制文件与文本文件,文件的打开和关闭,⽂件的顺序读写和随机读写以及⽂件读取结束的判定和⽂件缓冲区。 1.什么是⽂件 像这样在磁盘(硬盘)上…

Pycharm里设置关于designer.exe以及pyuic5.exe的外部工具

文章目录 1.Pycharm与Pyuic5介绍(1)Pycharm(2)Pyuic5 2.Pycharm里设置外部工具(1)切换到外部工具(2)designer创建外部工具(3)pyuic5创建外部工具(4)使用designer和pyuic5 3.本章总结 1.Pycharm与Pyuic5介绍 (1)Pycharm Pycharm是专门用于python编程语言的编辑软件,…

Oracle 数据库安装及配置

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…