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获取整个页面文档的实现代码
Dec 15 Javascript
jquery单行文字向上滚动效果示例
Mar 06 Javascript
通过jquery 获取URL参数并进行转码
Aug 18 Javascript
jQuery+css实现百度百科的页面导航效果
Dec 16 Javascript
学习JavaScript正则表达式
Nov 13 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
Jul 28 Javascript
javascript显示上周、上个月日期的处理方法
Feb 03 Javascript
浅析javaScript中的浅拷贝和深拷贝
Feb 15 Javascript
jqgrid实现简单的单行编辑功能
Sep 30 Javascript
Vue实现移动端页面切换效果【推荐】
Nov 13 Javascript
详解vue beforeEach 死循环问题解决方法
Feb 25 Javascript
Vue数组响应式操作及高阶函数使用代码详解
Aug 01 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 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
JSON 数据格式介绍
2012/01/13 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
python中split方法用法分析
2015/04/17 Python
详解Python的Lambda函数与排序
2016/10/25 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
python安装后的目录在哪里
2020/06/21 Python
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
电子技术专业中专生的自我评价
2013/12/17 职场文书
4s店机修工岗位职责
2013/12/20 职场文书
大学自我评价
2014/02/12 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
视光学专业自荐信
2014/06/24 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
Nginx如何配置根据路径转发详解
2022/07/23 Servers