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队列操作方法实例
Jun 11 Javascript
异步安全加载javascript文件的方法
Jul 21 Javascript
Javascript中的数据类型之旅
Oct 18 Javascript
javascript检查某个元素在数组中的索引值
Mar 30 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
Jun 15 Javascript
浅析JavaScript函数的调用模式
Aug 10 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
Mar 06 Javascript
Vue之Watcher源码解析(1)
Jul 19 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
Dec 13 Javascript
详解mpvue开发小程序小总结
Jul 25 Javascript
详解vue-element Tree树形控件填坑路
Mar 26 Javascript
微信小程序向Java后台传输参数的方法实现
Dec 10 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
php 远程图片保存到本地的函数类
2008/12/08 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
php生成word并下载代码实例
2019/03/15 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
获取body标签的两种方法
2011/10/13 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python读取和保存图片5种方法对比
2018/09/12 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
python 装饰器重要在哪
2021/02/14 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
国际政治个人自荐信范文
2013/11/26 职场文书
导师工作推荐信范文
2014/05/17 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
公司感谢信范文
2015/01/22 职场文书
八年级英语教学计划
2015/01/23 职场文书
电信营业员岗位职责
2015/04/14 职场文书
大学生实习介绍信
2015/05/05 职场文书
谢师宴家长致辞
2015/07/27 职场文书
经典祝酒词大全
2015/08/12 职场文书
干部理论学习心得体会
2016/01/21 职场文书