返回顶部
首页 > 资讯 > 精选 >JavaScript内存空间是什么
  • 832
分享到

JavaScript内存空间是什么

2023-06-15 10:06:03 832人浏览 独家记忆
摘要

这篇文章给大家介绍javascript内存空间是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。概述变量对象与堆内存var a = 20;var b = &

这篇文章给大家介绍javascript内存空间是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

概述

变量对象与堆内存

var a = 20;var b = 'abc';var c = true;var d = { m: 20 }

JavaScript内存空间是什么

在很长一段时间里认为内存空间的概念在js学习中并不是那么重要。可是后我当我回过头来重新整理JS基础时,发现由于对它们的模糊认知,导致了很多东西我都理解得并不明白。比如最基本的引用数据类型和引用传递到底是怎么回事儿?比如浅复制与深复制有什么不同?还有闭包,原型等等。

因此后来我才渐渐明白,想要对JS的理解更加深刻,就必须对内存空间有一个清晰的认知。

一、栈与堆

注:栈,也可以叫堆栈

C/C++不同,JavaScript中并没有严格意义上区分栈内存与堆内存。因此我们可以粗浅的理解为JavaScript的所有数据都保存在堆内存中。但是在某些场景,我们仍然需要基于堆栈数据结构的思路进行处理,比如JavaScript的执行上下文(关于执行上下文我会在下一篇文章中总结)。执行上下文在逻辑上实现了堆栈。因此理解堆栈数据结构的原理与特点任然十分重要。

要简单理解栈的存取方式,我们可以通过类比乒乓球盒子来分析。如下图左侧。

JavaScript内存空间是什么

乒乓球盒子与栈类比

这种乒乓球的存放方式与栈中存取数据的方式如出一辙。处于盒子中最顶层的乒乓球5,它一定是最后被放进去,但可以最先被使用。而我们想要使用底层的乒乓球1,就必须将上面的4个乒乓球取出来,让乒乓球1处于盒子顶层。这就是栈空间先进后出,后进先出的特点。图中已经详细的表明了栈空间的存储原理。

堆存取数据的方式,则与书架与书非常相似。

书虽然也整齐的存放在书架上,但是我们只要知道书的名字,我们就可以很方便的取出我们想要的书,而不用像从乒乓球盒子里取乒乓一样,非得将上面的所有乒乓球拿出来才能取到中间的某一个乒乓球。好比在JSON格式的数据中,我们存储的key-value是可以无序的,因为顺序的不同并不影响我们的使用,我们只需要关心书的名字。

二、变量对象与基础数据类型

JavaScript的执行上下文生成之后,会创建一个叫做变量对象的特殊对象(具体会在下一篇文章与执行上下文一起总结),JavaScript的基础数据类型往往都会保存在变量对象中。

严格意义上来说,变量对象也是存放于堆内存中,但是由于变量对象的特殊职能,我们在理解时仍然需要将其于堆内存区分开来。

基础数据类型都是一些简单的数据段,JavaScript中有5中基础数据类型,分别是Undefined、Null、Boolean、Number、String。基础数据类型都是按值访问,因为我们可以直接操作保存在变量中的实际的值。

三、引用数据类型与堆内存

与其他语言不通,JS的引用数据类型,比如数组Array,它们值的大小是不固定的。引用数据类型的值是保存在堆内存中的对象。JavaScript不允许直接访问堆内存中的位置,因此我们不能直接操作对象的堆内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。因此,引用类型的值都是按引用访问的。这里的引用,我们可以粗浅地理解为保存在变量对象中的一个地址,该地址与堆内存的实际值相关联。

为了更好的搞懂变量对象与堆内存,我们可以结合以下例子与图解进行理解。

var a1 = 0;   // 变量对象var a2 = 'this is string'; // 变量对象var a3 = null; // 变量对象var b = { m: 20 }; // 变量b存在于变量对象中,{m: 20} 作为对象存在于堆内存中var c = [1, 2, 3]; // 变量c存在于变量对象中,[1, 2, 3] 作为对象存在于堆内存中

JavaScript内存空间是什么

上例图解

因此当我们要访问堆内存中的引用数据类型时,实际上我们首先是从变量对象中获取了该对象的地址引用(或者地址指针),然后再从堆内存中取得我们需要的数据。

理解了JS的内存空间,我们就可以借助内存空间的特性来验证一下引用类型的一些特点了。

前端面试中我们常常会遇到这样一个类似的题目

// demo01.jsvar a = 20;var b = a;b = 30;// 这时a的值是多少?// demo02.jsvar m = { a: 10, b: 20 }var n = m;n.a = 15;// 这时m.a的值是多少

在变量对象中的数据发生复制行为时,系统会自动为新的变量分配一个新值。var b = a执行之后,a与b虽然值都等于20,但是他们其实已经是相互独立互不影响的值了。具体如图。所以我们修改了b的值以后,a的值并不会发生变化。

JavaScript内存空间是什么

demo01图解

在demo02中,我们通过var n = m执行一次复制引用类型的操作。引用类型的复制同样也会为新的变量自动分配一个新的值保存在变量对象中,但不同的是,这个新的值,仅仅只是引用类型的一个地址指针。当地址指针相同时,尽管他们相互独立,但是在变量对象中访问到的具体对象实际上是同一个。如图所示。

因此当我改变n时,m也发生了变化。这就是引用类型的特性。

JavaScript内存空间是什么

demo02图解

通过内存的角度来理解,是不是感觉要轻松很多。除此之外,我们还可以以此为基础,一步一步的理解JavaScript的执行上下文,作用域链,闭包,原型链等重要概念。其他的我会在以后的文章慢慢总结,敬请期待。

内存空间管理

因为JavaScript具有自动垃圾收集机制,所以我们在开发时好像不用关心内存的使用问题,内存的分配与回收都完全实现了自动管理。但是根据我自己的开发经验,了解内存机制有助于自己清晰的认识到自己写的代码在执行过程中发生过什么,从而写出性能更加优秀的代码。因此关心内存是一件非常重要的事情。

JavaScript的内存生命周期

分配你所需要的内存

使用分配到的内存(读、写)

不需要时将其释放、归还

为了便于理解,我们使用一个简单的例子来解释这个周期。

var a = 20;  // 在内存中给数值变量分配空间alert(a + 100);  // 使用内存var a = null; // 使用完毕之后,释放内存空间

第一步和第二步我们都很好理解,JavaScript在定义变量时就完成了内存分配。第三步释放内存空间则是我们需要重点理解的一个点。

JavaScript有自动垃圾收集机制,那么这个自动垃圾收集机制的原理是什么呢?其实很简单,就是找出那些不再继续使用的值,然后释放其占用的内存。垃圾收集器会每隔固定的时间段就执行一次释放操作。

在JavaScript中,最常用的是通过标记清除的算法来找到哪些对象是不再继续使用的,因此a = null其实仅仅只是做了一个释放引用的操作,让 a 原本对应的值失去引用,脱离执行环境,这个值会在下一次垃圾收集器执行操作时被找到并释放。而在适当的时候解除引用,是为页面获得更好性能的一个重要方式。

关于JavaScript内存空间是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: JavaScript内存空间是什么

本文链接: https://lsjlt.com/news/279776.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript内存空间是什么
    这篇文章给大家介绍JavaScript内存空间是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。概述变量对象与堆内存var a = 20;var b = &...
    99+
    2023-06-15
  • 云存储空间是什么
    云存储空间是指网络中的虚拟个人存储空间,可将数据上传至第三方托管的虚拟服务器中,从而实现数据备份的操作,比如你将手机或电脑上的资料上传到云存储空间中,需要查看信息内容时,无论在哪里,都可以通过网络连接,使用手机或电脑查看云存储空间的数据信息...
    99+
    2024-04-02
  • 国内空间和国外空间的区别是什么
    1. 价格:国内空间相对便宜,而国外空间价格较高。2. 速度和稳定性:由于国外空间的服务器距离较远,导致访问速度较慢,并且受网络波动...
    99+
    2023-06-04
    国内空间 空间
  • 国内PHP空间是什么意思
    小编给大家分享一下国内PHP空间是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!PHP空间即是能够支持PHP程序运行的主机空间,目前国内的PHP空间还是很...
    99+
    2023-06-07
  • JavaScript内存泄漏和内存溢出是什么
    本篇内容主要讲解“JavaScript内存泄漏和内存溢出是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript内存泄漏和内存溢出是什么”吧! ...
    99+
    2024-04-02
  • javascript中内存指的是什么
    这篇文章主要介绍了javascript中内存指的是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript中内存指的是什么文章都会有所收获,下面我们一起来看看吧。...
    99+
    2024-04-02
  • sed模式空间和暂存空间的区别是什么
    本篇内容主要讲解“sed模式空间和暂存空间的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sed模式空间和暂存空间的区别是什么”吧!sed编辑器逐行处理文件,并将输出结果打印到屏幕上。...
    99+
    2023-06-09
  • Linux中Device Mapper内核空间是什么
    这篇文章主要讲解了“Linux中Device Mapper内核空间是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中Device Mapper内核空间是什么”吧!Devicem...
    99+
    2023-06-27
  • c#怎么释放内存空间
    释放 c# 对象内存的方法包括:显式释放 (obj = null)使用 using 语句使用垃圾回收器(gc):调用 gc.collect()调用 gc.waitforpendingfi...
    99+
    2024-05-11
    c# 垃圾回收器
  • 详解JS内存空间
    目录概述一、栈与堆二、变量对象与基础数据类型三、引用数据类型与堆内存内存空间管理概述 变量对象与堆内存 var a = 20; var b = 'abc'; var c = tr...
    99+
    2024-04-02
  • 购买国内空间的方法是什么
    购买国内虚拟空间的方法一般有以下几种:1. 直接联系虚拟空间提供商。您可以通过搜索引擎或者相关网站找到国内虚拟空间提供商的官方网站,...
    99+
    2023-05-16
    购买国内空间 国内空间 空间
  • 国内网站空间的优点是什么
    国内网站空间的优点包括: 1.稳定性:国内网站空间通常具有更好的稳定性和可靠性,能够提供更好的服务保障。 2.速度快:国内网站空间的...
    99+
    2024-04-15
    空间
  • 国内网站空间的缺点是什么
    速度慢:国内网站空间通常受到网络带宽限制,导致网站访问速度较慢。 稳定性差:由于国内网站空间受到国内网络环境影响,存在断网、崩溃等...
    99+
    2024-04-15
    空间
  • 如何购买空间内存
    要购买空间内存,您需要先选择一个合适的主机服务提供商,然后根据您的需求选择一个适合的主机计划。在购买主机计划时,您需要注意以下几点:...
    99+
    2023-05-31
    买空间 空间
  • php空间是什么
    本篇内容主要讲解“php空间是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php空间是什么”吧!能够正常运行PHP程序的主机空间就把它称为PHP空间(虚拟主机)。那么在选购php空间的时候...
    99+
    2023-06-07
  • 什么是PHP空间
    这篇文章主要讲解了“什么是PHP空间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是PHP空间”吧!PHP是英文超级文本预处理语言(PHP:Hypertext Preprocessor)...
    99+
    2023-06-07
  • 什么是asp空间
    这篇文章主要讲解了“什么是asp空间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是asp空间”吧!ASP是Active Server  Page的缩写,意为“动态服务器页面”...
    99+
    2023-06-07
  • shopex空间是什么
    shopex空间是指提供给用户存放网站文件、数据库等信息的服务器空间,用于搭建和运行基于shopex平台的电商网站。用户可以通过购买...
    99+
    2023-05-31
    shopex空间 空间
  • java内存间交互规则是什么
    这篇文章给大家分享的是有关java内存间交互规则是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、关于主内存与工作内存之间的交互协议,即一个变量如何从主内存拷贝到工作内存,如何从工作内存同步到主内存中的实现...
    99+
    2023-06-15
  • JavaScript中内存泄漏指的是什么
    内存泄漏是指程序中一个对象被分配到内存中既不能使用,又不能回收,留在了堆内存中就称为内存泄漏,当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作