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 相关文章推荐
在textarea中屏蔽js的某个function的javascript代码
Apr 20 Javascript
ext 同步和异步示例代码
Sep 18 Javascript
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
Jul 04 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
Dec 11 Javascript
jQuery实现首页顶部可伸缩广告特效代码
Apr 15 Javascript
JavaScript获取各大浏览器信息图示
Nov 20 Javascript
详解jQuery的表单验证插件--Validation
Dec 21 Javascript
Vue声明式渲染详解
May 17 Javascript
基于three.js编写的一个项目类示例代码
Jan 05 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
Jan 16 Javascript
Vue循环中多个input绑定指定v-model实例
Aug 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
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
javascript定时器完整实例
2015/02/10 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
详解vue中localStorage的使用方法
2018/11/22 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
如何基于jQuery实现五角星评分
2020/09/02 jQuery
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python信息抽取之乱码解决办法
2017/06/29 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
Python常见数据类型转换操作示例
2019/05/08 Python
如何基于python实现脚本加密
2019/12/28 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
车祸赔偿收入证明
2014/01/09 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
门球健将观后感
2015/06/16 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python