javascript内存分配原理实例分析


Posted in Javascript onApril 10, 2017

本文实例讲述了javascript内存分配原理。分享给大家供大家参考,具体如下:

JavaScript中的变量分为两种,原始值和引用值。原始值指的是原始数据类型的值,比如undefined,null,number,string,boolean类型所表示的值。引用值指的是复合数据类型的值,即Object,Function,Array等。

原始值和引用值存储在内存中的位置分别为栈和堆原始值是存储在栈中的简单数据段,他们的值直接存储在变量访问的位置引用值是存储在堆中的对象

存储在栈中的值是一个指针,指向存储在堆中的实际对象。

我们来看一段代码:

function Person(id,name,age){
this.id = id;
this.name = name;
this.age = age;
}
var num = 10;
var bol = true;
var str = "abc";
var obj = new Object();
var arr = ['a','b','c'];
var person = new Person(100,"jxl",22);

再看看内存分析图:

javascript内存分配原理实例分析

由上图可知我们无法直接操作存储在堆中的数据,但是我们可以通过栈中的引用来操作对象。那么为什么要分开呢?不都是存储在内存中吗?

栈的优势就是存取速度比堆要快,仅次于直接位于CPU中的寄存器,但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,垃圾收集器会自动地收走这些不再使用的数据,但是缺点是由于在运行时动态分配内存,所以存取速度较慢。

所以相对于简单数据类型而言,他们占用内存比较小,如果放在堆中,查找会浪费很多时间,而把堆中的数据放入栈中也会影响栈的效率。比如对象和数组是可以无限拓展的,正好放在可以动态分配大小的堆中。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Javascript学习笔记4 Eval函数
Jan 11 Javascript
js DOM的学习笔记
Dec 22 Javascript
JavaScript中textRange对象使用方法小结
Mar 24 Javascript
javascript正则表达式总结
Feb 29 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
Apr 07 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
May 16 Javascript
文件上传的几个示例分享【推荐】
Dec 16 Javascript
深入理解React高阶组件
Sep 28 Javascript
.vue文件 加scoped 样式不起作用的解决方法
May 28 Javascript
vue基础之事件v-onclick="函数"用法示例
Mar 11 Javascript
js实现简单的贪吃蛇游戏
Apr 23 Javascript
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
移动端触屏幻灯片图片切换插件idangerous swiper.js
Apr 10 #Javascript
Angular中ng-bind和ng-model的区别实例详解
Apr 10 #Javascript
javascript深拷贝的原理与实现方法分析
Apr 10 #Javascript
Vue2递归组件实现树形菜单
Apr 10 #Javascript
JS判断两个对象内容是否相等的方法示例
Apr 10 #Javascript
javascript防篡改对象实例详解
Apr 10 #Javascript
jQuery EasyUI之验证框validatebox实例详解
Apr 10 #jQuery
You might like
PHP中其实也可以用方法链
2011/11/10 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
python 中字典嵌套列表的方法
2018/07/03 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
Django中的cookie和session
2019/08/27 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
JAVA招聘远程笔试题
2015/07/23 面试题
致铅球运动员广播稿精选
2014/01/12 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
违反学校规则制度检讨书
2015/01/01 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS