javascript中栈内存与堆内存如何理解?以及如何区分?

在 JavaScript 中,内存管理是自动进行的,由 JavaScript 引擎负责。尽管如此,理解栈内存(Stack Memory)和堆内存(Heap Memory)之间的区别对于理解变量存储机制、内存分配和垃圾回收非常重要。

栈内存

栈内存是一种线性数据结构,它遵循先进后出(LIFO, Last In First Out)的原则。栈内存主要用于存储函数调用、局部变量、函数参数以及程序执行的上下文。栈内存的特点包括:

  • 快速访问:由于栈是一种简单的数据结构,访问和操作栈的速度非常快。
  • 有限大小:栈的大小是有限的,当栈空间耗尽时会发生栈溢出(stack overflow)。
  • 自动管理:栈内存中的数据通常在函数执行结束时自动释放。

在 JavaScript 中,原始数据类型(如 Number, String, Boolean, Undefined, NullSymbol)的值直接存储在栈内存中。这意味着原始类型的值是按值访问的,并且在栈内存中直接保存这些值。

let number = 10; // 原始类型的值存储在栈内存中
let string = "Hello"; // 字符串值存储在栈内存中

堆内存

堆内存是一大片内存空间,它不像栈内存那样有序。堆内存主要用于存储对象(如数组、函数、类的实例等)。堆内存的特点包括:

  • 动态分配:堆内存可以按需申请空间,并且访问速度比栈内存慢。
  • 手动管理:在一些低级语言中,堆内存需要程序员手动管理。但在 JavaScript 中,垃圾回收机制自动管理堆内存。
  • 持久性:堆内存中的数据可以长时间存在,直到垃圾回收机制判定其不再使用时才会被释放。

在 JavaScript 中,对象的引用存储在栈内存中,而对象本身的数据存储在堆内存中。这意味着,当你声明一个对象时,栈内存中会保存一个指向堆内存中对象的指针。

let object = { name: "Alice" }; // 对象的引用存储在栈内存中,对象本身存储在堆内存中

如何区分

  • 原始类型 vs 对象类型:原始类型的值直接存储在栈内存中,而对象类型的引用存储在栈内存中,对象本身的数据存储在堆内存中。
  • 存储方式:栈内存中的数据是按值存储的,堆内存中的数据是按引用存储的。
  • 生命周期:栈内存中的数据通常在函数执行结束后自动释放,而堆内存中的数据则在不再被引用时由垃圾回收机制回收。

示例

假设我们有一个简单的 JavaScript 程序,如下所示:

function example() {let a = 10;           // a 存储在栈内存中let b = { value: 20 }; // b 的引用存储在栈内存中,对象存储在堆内存中let c = "string";     // c 存储在栈内存中// 修改对象的属性会影响堆内存中的数据b.value = 30;// 函数执行结束后,a, b, c 的引用从栈内存中移除
}example();

在这个例子中,ac 是原始类型的值,直接存储在栈内存中。b 是一个对象的引用,存储在栈内存中,而对象本身存储在堆内存中。当 example 函数执行结束时,栈内存中的 a, b, c 的引用被移除,但由于 b 对象仍存在于堆内存中,直到垃圾回收机制判定其不再被任何变量引用时才会被回收。

理解栈内存和堆内存之间的区别有助于更好地管理内存资源,尤其是在处理大型对象或复杂数据结构时,这对于避免内存泄漏和优化性能至关重要。

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

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

相关文章

【电路笔记】-运算放大器比较器

运算放大器比较器 文章目录 运算放大器比较器1、概述2、表示2.1 同相比较器2.2 反相比较器3、临界点转换4、施密特触发器4.1 同相触发器4.2 反相触发器4.3 应用5、总结1、概述 在前面的大多数运算放大器文章中,电路都有一个到反相输入的反馈环路。 这种设计是最常见的,因为它…

海外社媒干货:Twitter的特点及运营策略

当你在海外社交媒体上运营,了解不同平台的特点和具体实践是非常重要的。本期让小编来为你介绍推特(Twitter)以及一些相关的运营干货: (图片源于网络) Twitter简介 推特是一家美国社交网络及微博客服务的公…

通过Python代码发送量化交易信号邮件通知

量化交易利用数学模型和计算机算法来分析市场数据,并生成交易信号,本文将介绍如何使用Python编写一个简单的脚本,通过发送邮件通知量化交易信号。 开启SMTP服务 首先要在发件箱的邮件设置中,将POP3/SMPT服务开启,记录下授权密码,在本地可通过此密码登录,注意有效期和保…

【C++ Primer Plus习题】16.9

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <ctime> #include <v…

6000 字掌握 Java IO 知识体系

“子谦&#xff0c;Java IO 也太上头了吧&#xff1f;”新兵蛋子小二向头顶很凉快的老韩抱怨道&#xff0c;“你瞧&#xff0c;我就按照传输方式对 IO 进行了一个简单的分类&#xff0c;就能搞出来这么多的玩意&#xff01;” 好久没搞过 IO 了&#xff0c;老王看到这幅思维导图…

LLM - 理解 多模态大语言模型(MLLM) 的 预训练(Pre-training) 与相关技术 (三)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142167709 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 完备(F…

数字自然资源领域的实现路径

在数字化浪潮的推动下&#xff0c;自然资源的管理与利用正经历着前所未有的变革。本文将从测绘地理信息与遥感专业的角度&#xff0c;深度分析数字自然资源领域的实现路径。 1. 基础数据的数字化 数字自然资源的构建&#xff0c;首先需要实现基础数据的数字化。这包括地形地貌…

GUI编程16:图片按钮、单选框、多选框

视频链接&#xff1a;18、图片按钮、单选框、多选框_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p18&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.图片按钮代码示例 package com.yundait.lesson05;import javax.swing.*; import java.awt.*; impo…

【Linux:共享内存】

共享内存的概念&#xff1a; 操作系统通过页表将共享内存的起始虚拟地址映射到当前进程的地址空间中共享内存是由需要通信的双方进程之一来创建但该资源并不属于创建它的进程&#xff0c;而属于操作系统 共享内存可以在系统中存在多份&#xff0c;供不同个数&#xff0c;不同进…

Google SERP API 对接说明

Google SERP API 对接说明 Google SERP&#xff08;Search Engine Results Page&#xff09;是用户在Google搜索引擎中输入查询后看到的结果页面。它显示自然搜索结果、广告、特色摘要、知识图谱以及图片、视频等多种内容&#xff0c;旨在为用户提供最相关的信息。 本文将详细…

心觉:成功学就像一把刀,有什么作用关键在于使用者(二)

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作174/1000天 上一篇文章讲了成功学到底是个啥 是如何起作用的 为什么有些人觉得没有用&#xff1f; 今天我们再展开来剖析一下这…

运维监控专项学习笔记-id:0-需求场景、监控作用、监控能力

参考来源&#xff1a; 极客时间专栏-运维监控系统实战笔记&#xff0c;作者&#xff1a;秦晓辉 一、需求场景 学习监控知识&#xff0c;得先了解为什么&#xff0c;也就是监控是因何产生的&#xff0c;解决了什么问题&#xff0c;有哪些典型的方案&#xff0c;分别有什么优缺…

转行大模型开发:挑战与机遇,如何有效学习以实现职业转变

前言 甚至随着技术的进步&#xff0c;我们每个人都可能面临失业风险&#xff0c;因为未来我们所处的整个行业都可能被颠覆&#xff0c;公司也会不复存在。司机这一职业就是随着科技发展而不断演进的典型案例&#xff0c;从最早的马车夫&#xff0c;到现在的汽车驾驶员&#xf…

前端学习杂乱记录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、Html二、CSS1. BFC布局2. 定位总结3. 动画1. transform变换2. transition过渡3. keyframes 和 animation 3. 伸缩盒模型&#xff1a;flex布局 三、JS1. 逻辑中断…

Aigtek功率放大器能应用哪些行业

功率放大器是一种在各个行业中发挥关键作用的技术设备&#xff0c;其应用涉及广泛&#xff0c;包括但不限于以下几个主要领域&#xff1a; 1.医疗行业&#xff1a; 在医疗领域&#xff0c;功率放大器常用于医学超声成像系统。超声波传感器通过发射和接收声波&#xff0c;生成图…

prime1靶机渗透 (信息收集 内核提权)

靶机信息 vulnhub靶机 prime1 主机发现 -sn 是scan and no port hack 只用于主机发现 ┌──(kali㉿kali)-[~] └─$ sudo nmap -sn 192.168.50.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-09 02:25 EDT Nmap scan report for 192.168.50.1 Host is up …

【RabbitMQ】重试机制、TTL

重试机制 在消息从Broker到消费者的传递过程中&#xff0c;可能会遇到各种问题&#xff0c;如网络故障、服务不可用、资源不足等&#xff0c;这些问题都可能导致消息处理失败。为了解决这些问题&#xff0c;RabbitMQ提供了重试机制&#xff0c;允许消息在处理失败之后重新发送…

Mac使用技巧-来自苹果专人在线辅导服务

好记性不如烂笔头 跟着技术人员从头到尾操作了一遍&#xff0c;发现应该跟人家学习的时候&#xff0c;是很容易接受并接收知识点的&#xff0c;但发现还是要做一下笔记&#xff0c;好记性不如烂笔头。 用来用去&#xff0c;感觉Mac更适合不搭配鼠标使用&#xff0c;因为鼠标的滑…

行业内幕!宠物浮毛对肺的危害大?实测霍尼韦尔、有哈、希喂除浮毛哪家强?

我有一个医生朋友&#xff0c;他常常给身边的朋友科普养猫、养狗、养宠物掉下来的毛发对呼吸道健康的影响。 看到身边的朋友养猫心痒痒&#xff0c;听他讲完又时刻担心着宠物毛发对呼吸道健康的危害。一直犹犹豫豫没下决心去接猫&#xff0c;直到前段时间过生日&#xff0c;朋…

CAFE: Catastrophic Data Leakage in Vertical Federated Learning(纵向联邦学习)

NeurIPS 2021 发表单位&#xff1a;美国伦斯勒理工学院、IBM研究院、国立阳明交通大学 GitHub&#xff1a;https://github.com/DeRafael/CAFE 摘要&#xff1a; 梯度共享机制&#xff08;批处理&#xff09;会泄露私有数据—>提出数据泄露攻击CAFE—>提出缓解CAFE对策 在…