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 相关文章推荐
关于Aptana Studio生成自动备份文件的解决办法
Dec 23 Javascript
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
Nov 14 Javascript
JS操作图片(增,删,改) 例子
Apr 17 Javascript
javascript级联下拉列表实例代码(自写)
May 10 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
Jul 04 Javascript
详谈jQuery中的this和$(this)
Nov 13 Javascript
浅谈jQuery中setInterval()方法
Jul 07 Javascript
JavaScript实现斗地主游戏的思路
Feb 29 Javascript
javaScript手机号码校验工具类PhoneUtils详解
Dec 08 Javascript
深入浅析javascript函数中with
Oct 28 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
Dec 13 Javascript
vue backtop组件的实现完整代码
Apr 07 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
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
PHP 验证登陆类分享
2015/03/13 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
javascript 二进制运算技巧解析
2012/11/27 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
跟老齐学Python之集合(set)
2014/09/24 Python
详解Python3的TFTP文件传输
2018/06/26 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
一文带你了解Python中的字符串是什么
2018/11/20 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
Python中内建模块collections如何使用
2020/05/27 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
药店主任岗位责任制
2014/02/10 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
机关作风建设自查报告
2014/10/22 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
小升初自荐信范文
2015/03/05 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
python unittest单元测试的步骤分析
2021/08/02 Python
python创建字典及相关管理操作
2022/04/13 Python