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 相关文章推荐
看了就知道什么是JSON
Dec 09 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
Apr 08 Javascript
javascript获取四位数字或者字母的随机数
Jan 09 Javascript
JavaScript插件化开发教程 (一)
Jan 27 Javascript
JavaScript数据类型学习笔记
Jan 25 Javascript
JS实现六边形3D拖拽翻转效果的方法
Sep 11 Javascript
基于JavaScript实现前端文件的断点续传
Oct 17 Javascript
旺旺在线客服代码 旺旺客服代码生成器
Jan 09 Javascript
浅谈Webpack打包优化技巧
Jun 12 Javascript
Vue.js实现大转盘抽奖总结及实现思路
Oct 09 Javascript
vue实现点击按钮切换背景颜色的示例代码
Jun 23 Javascript
Vant 中的Toast设置全局的延迟时间操作
Nov 04 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
用PHP实现ODBC数据分页显示一例
2006/10/09 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
js的event详解。
2006/09/06 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
如何能分清npm cnpm npx nvm
2019/01/17 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
Python中扩展包的安装方法详解
2017/06/14 Python
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
Python3实现的判断环形链表算法示例
2019/03/07 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
Python文件路径名的操作方法
2019/10/30 Python
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
师范生自我鉴定
2014/03/20 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
工作失职自我检讨书
2015/05/05 职场文书
小学中队长竞选稿
2015/11/20 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书