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 相关文章推荐
jQuery Ajax 全解析
Feb 08 Javascript
jQuery仿Excel表格编辑功能的实现代码
May 01 Javascript
js弹出div并显示遮罩层
Feb 12 Javascript
JavaScript中的分号插入机制详细介绍
Feb 11 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
CSS中position属性之fixed实现div居中
Dec 14 Javascript
Vue.js每天必学之表单控件绑定
Sep 05 Javascript
vue 地图可视化 maptalks 篇实例代码详解
May 21 Javascript
vue.js中导出Excel表格的案例分析
Jun 11 Javascript
解决layui laydate 时间控件一闪而过的问题
Sep 28 Javascript
关于引入vue.js 文件的知识点总结
Jan 28 Javascript
Vue切换div显示隐藏,多选,单选代码解析
Jul 14 Javascript
移动端触屏幻灯片图片切换插件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
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
jquery鼠标停止移动事件
2013/12/21 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
谈谈React中的Render Props模式
2018/12/06 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
python数据类型_字符串常用操作(详解)
2017/05/30 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
keras中的backend.clip用法
2020/05/22 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
Python+unittest+DDT实现数据驱动测试
2020/11/30 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
Android面试宝典
2013/08/06 面试题
《小儿垂钓》教学反思
2014/02/23 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
运动会通讯稿100字
2015/07/20 职场文书
求职自我评价参考范文
2019/05/16 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
php修改word的实例方法
2021/11/17 PHP
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL