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 相关文章推荐
javascript通过navigator.userAgent识别各种浏览器
Oct 25 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
Jun 09 Javascript
javascript实现简单的分页特效
Aug 12 Javascript
jquery自定义插件——window的实现【示例代码】
May 06 Javascript
js脚本编写简单刷票投票系统
Jun 27 Javascript
layui结合form,table的全选、反选v1.0示例讲解
Aug 15 Javascript
vue-router 手势滑动触发返回功能
Sep 30 Javascript
swiper实现异形轮播效果
Nov 28 Javascript
vue 检测用户上传图片宽高的方法
Feb 06 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
Mar 05 Javascript
mpvue 项目初始化及实现授权登录的实现方法
Jul 20 Javascript
JavaScript实现网页下拉菜单效果
Nov 20 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 设计模式之观察者模式介绍
2012/02/22 PHP
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
PHP数组操作类实例
2015/07/11 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
javascript 计算两个整数的百分比值
2009/12/26 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
python批量同步web服务器代码核心程序
2014/09/01 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
python实现XML解析的方法解析
2019/11/16 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
银行职员思想汇报
2013/12/31 职场文书
教师开学感言
2014/02/14 职场文书
有兼职工作经历的简历自我评价
2014/03/07 职场文书
小学生新年寄语
2014/04/03 职场文书
作风建设年活动总结
2014/08/27 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫
详解Python中的for循环
2022/04/30 Python
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技