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 相关文章推荐
Mootools 1.2教程 正则表达式
Sep 15 Javascript
javascript 面向对象全新理练之继承与多态
Dec 03 Javascript
jquery.validate使用攻略 第二部
Jul 01 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
Dec 08 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
May 03 Javascript
Bootstrap常用组件学习(整理)
Mar 24 Javascript
js前端实现图片懒加载(lazyload)的两种方式
Apr 24 Javascript
详解Vue组件实现tips的总结
Nov 01 Javascript
深入解析koa之异步回调处理
Jun 17 Javascript
JS实现按比例缩小图片宽高
Aug 24 Javascript
Vue中component标签解决项目组件化操作
Sep 04 Javascript
vue3.0自定义指令(drectives)知识点总结
Dec 27 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
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php mssql 时间格式问题
2009/01/13 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
jQuery 动画基础教程
2008/12/25 Javascript
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
jQuery过滤选择器用法分析
2015/02/10 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
2019/11/04 Javascript
常见的python正则用法实例讲解
2016/06/21 Python
深入理解Python装饰器
2016/07/27 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
对pandas中Series的map函数详解
2018/07/25 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
做人民满意的公务员活动方案
2014/08/25 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
P站美图推荐——变身女主角特辑
2022/03/20 日漫
python中validators库的使用方法详解
2022/09/23 Python