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 相关文章推荐
js利用div背景,做一个竖线的效果。
Nov 22 Javascript
javascript 运算数的求值顺序
Aug 23 Javascript
javascript时间自动刷新实现原理与步骤
Jan 06 Javascript
浅析js设置控件的readonly与enabled属性问题
Dec 25 Javascript
ajax+jQuery实现级联显示地址的方法
May 06 Javascript
js+ajax实现获取文件大小的方法
Dec 08 Javascript
CSS中position属性之fixed实现div居中
Dec 14 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
Sep 26 Javascript
JS回调函数基本定义与用法实例分析
May 24 Javascript
vue通过路由实现页面刷新的方法
Jan 25 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
Mar 08 Javascript
使用原生JS实现滚轮翻页效果的示例代码
May 31 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
20个PHP常用类库小结
2011/09/11 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
浅谈PHP安全防护之Web攻击
2017/01/03 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
python中去空格函数的用法
2014/08/21 Python
Python3几个常见问题的处理方法
2019/02/26 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
西班牙多品牌鞋店连锁店:Krack
2018/11/30 全球购物
十八大闭幕感言
2014/01/22 职场文书
社会实践感言
2014/01/25 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
餐厅筹备计划书
2014/04/25 职场文书
市场调查策划方案
2014/06/10 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
2015入党自传格式范文
2015/06/26 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis