js内存

js在定义变量时完成了内存的分配

 

js具有自动垃圾回收机制,垃圾回收器会每隔固定的一段时间就执行一次释放操作,即找出那些不再继续使用的值,释放其占用的内存

 

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

 

在局部作用域中,当函数执行完毕,局部变量也就没有存在的必要了,因此垃圾回收器很容易做出判断并回收。但是全局变量什么时候需要自动释放内存空间则很难判断,因此在我们的开发中,需要尽量避免使用全局变量,以确保性能

 

C和C++不同,js没有在严格意义上区分堆内存和栈内存

 

可以粗浅地理解为js的所有数据都存在堆内存中

 

执行上下文在逻辑上实现了堆栈,需要基于堆栈数据结构的思路来理解执行上下文

 

栈空间的存储原理:先进后出,后进先出

 

js的执行上下文生成之后会创建一个叫变量对象的特殊对象,基本数据类型往往保存在变量对象中

 

严格意义上讲,变量对象也存在堆内存中,但是变量对象的特殊职能,在理解时仍然与堆内存区分开

 

基础数据类型都是按值访问,因此可以直接操作保存在变量中的实际值

 

与其他语言不同,js的引用数据类型,比如数组,值的大小是不固定的,引用数据类型的值是保存在堆内存中的对象,js不允许直接访问堆内存中的位置,因此不能直接操作对象的堆内存空间,在操作对象时,实际上是在操作对象的引用,而不是实际的对象

 

引用类型的值是按引用访问的,这里的引用可以粗浅理解为保存在变量对象中的一个地址,该地址与堆内存的实际值相关联。当要访问堆内存中的引用数据类型时,实际上是首先从变量对象中获取该对象的地址引用,然后再从堆内存中取得需要的数据

 

在变量对象中数据发生复制行为时,系统会自动为新的变量分配一个新值

 

引用类型的复制同样也会为新的变量自动分配一个新的值保存在变量对象中。不同的是,这个新的值,只是引用类型的一个引用地址,当引用地址相同时,尽管它们相互独立,但在变量对象中访问到的具体对象实际上是同一个

转载于:https://www.cnblogs.com/chuanzhi946/p/7111246.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

halcon 图像差分_Halcon编程-基于纹理的mara检测

表面瑕疵检测是机器视觉领域非常重要的一个应用。机器视觉是集光学、机电和计算机三个领域的一门不算新的技术。但目前表面瑕疵检测在学界主要是计算机专业或者控制专业瞄准图像处理方向在做,而视觉光学系统这一块主要是光学工程专业在做。很少有研究者把这三块都结…

Apache Camel入门

在先前的博文中,我们了解了企业集成模式(EIP)。 现在,在这篇文章中,我们将研究实现这些模式的Apache Camel框架。 关于骆驼: Apache Camel是一个开放源代码项目,已有将近5年的历史,…

css 写打印样式问题

(1)背景颜色打印不出来问题解决方法 background样式要加上 !important;color样式要加上 !important;-webkit-print-color-adjust: exact;然后记得浏览器打印设置里面要在“打印背景图形”前面打勾。 -webkit-print-color-adjust:…

android studio smssdk,SMSSDK for Android 配置

1.集成之前先要申请Mob的appkey与appsecret2.在Mob官网下载最新SDK,解压后会看到以下目录结构:SMSSDK下存放的是短信SDK的全部内容。3.在android studio中加入SMS的第三方库AS版本的SMSSDK目录下包含以下内容:MobCommons.jar:Mob …

linux后台不挂断运行 nohup命令

//后台常在 退出终端仍然运行 nohup python pyredis.py & nohup输出重定向到my.log nohup command > my.log 2>&1 &转载于:https://www.cnblogs.com/plxm/p/8136833.html

Ubuntu 16.04安装微信

微信没有出Linux的版本,但是可以通过以下方式解决: 1、使用网页版,除了没有公众号之后,一切都没问题,包括传文件等。 网页登录地址:https://wx.qq.com/ 2、使用第三方版本,只不过这个是桌面应用…

navision系统和sap区别_SAP那些事-实战篇-89-浅谈金税接口方案

以前金税接口这块一直是销售顾问在做,虽然和财务相关,也没有怎么关注。这次项目把金税接口分到了财务模块,结果遇到了一些问题,趁此机会把这块总结一下方案,供各位看官参考。方案1: 文本方案,这…

不变性的来龙去脉

因此,在我的第一篇文章中,我谈到了一些构建器模式,并提到了一个非常强大但却被忽视的概念:不变性。 什么是不可变类? 这只是一个其实例无法修改的类。 类属性的每个值都在其声明或其构造函数中设置,并在对…

JavaScript总结(3)

第3章 获取用户的输入 <script>10 intAprompt("请输入第一个数字","");11 intBprompt("请输入第二个数字",27);默认是2712 document.write("你输入的第一个数字是"intA);13 document.write("<…

css书写规范

在书写css样式的时候总是无意中就写乱了,无论是命名或者是样式的书写顺序,这里做一个总结,提醒自己在书写css的时候时刻注意,大家可以参考哈。 1. 样式属性顺序 单个样式规则下的属性在书写时,应按功能进行分组&…

android 协程,关于android:Kotlin协程实现原理SuspendCoroutineContext

明天咱们来聊聊Kotlin的协程Coroutine。如果你还没有接触过协程,举荐你先浏览这篇入门级文章What? 你还不晓得Kotlin Coroutine?如果你曾经接触过协程,置信你都有过以下几个疑难:协程到底是个什么货色?协程的suspend有什么作用&…

清空easyui checkbox选中项

$(#dg).datagrid(unselectAll);转载于:https://www.cnblogs.com/douhuan/p/7116744.html

python 编辑excel需要什么包_Python 中操作EXCEL表格的包

今天,马云爸爸又来贡献金句了,比王健林公公一亿一个小目标还高,“一个月挣一二十个亿很难受!!!”,作为在传统企业主要为电商部门提供数据分析的数据分析师,体验太深刻了。双11前后&a…

用Java处理大文件

最近,我不得不处理一组包含逐笔历史汇率市场数据的文件,并很快意识到使用传统的InputStream都无法将它们读取到内存中,因为每个文件的大小都超过4 GB。 Emacs甚至无法打开它们。 在这种特殊情况下,我可以编写一个简单的bash脚本&…

java IO(一):File类

1.File类简介 File类位于java.io包中。它面向文件层次级别操作、查看文件,而字节流、字符流操作数据时显然比之更底层。 学习File类包括以下几个重点:文件路径、文件分隔符、创建文件(目录)、删除文件(目录)、查看文件内容(输出目录内文件)、判断文件(是…

android listview 开发,android开发之ListView实现

今天又初步学习了一下ListView控件,看看效果如下:LisViewActivity.java源码:package com.jinhoward.UI_listview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.os.Bundl…

input ios问题 小程序_微信小程序开发常见问题汇总

原标题:微信小程序开发常见问题汇总1、域名必须是https非https的域名不被微信小程序允许。2、input组件placeholder字体颜色卸载placeholder-class里面的color并不生效,需要写在placeholder-style里面就可以了。3、wx.navigateTo无法跳转到带tabbar的页面…

https://github.com/

https://github.com/ qq邮箱 转载于:https://www.cnblogs.com/chang1/p/7133251.html

Less 的用法

1. node.js node.js是一个前端的框架 自带一个包管理工具npm node.js 的安装 官网:http://nodejs.cn/ 在命令行检验是否安装成功 切换到项目目录,初始化了一个package.json文件 安装与卸载jQuery包(例子) 安装 卸载 安装淘宝…

浅谈springboot整合ganymed-ssh2远程访问linux

环境介绍 技术栈 springbootmybatis-plusmysqlganymed-ssh2 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户…