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实现图片放大缩小功能后进行复杂排序的方法
Nov 08 Javascript
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
Javascript基础知识(三)BOM,DOM总结
Sep 29 Javascript
javascript 实现map集合
Apr 03 Javascript
javascript中Date对象应用之简易日历实现
Jul 12 Javascript
bootstrap读书笔记之CSS组件(上)
Oct 17 Javascript
js a标签点击事件
Mar 30 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
Jun 01 Javascript
JSON创建键值对(key是中文或者数字)方式详解
Aug 24 Javascript
Angular中点击li标签实现更改颜色的核心代码
Dec 08 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
Jan 07 Javascript
react实现同页面三级跳转路由布局
Sep 26 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
星际原理概述
2020/03/04 星际争霸
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
URL中“#” “?” &“”号的作用浅析
2017/02/04 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
详解ES6 export default 和 import语句中的解构赋值
2019/05/28 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
2020/05/14 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
windows下wxPython开发环境安装与配置方法
2014/06/28 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
python实现密码强度校验
2020/03/18 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
python中如何打包用户自定义模块
2020/09/23 Python
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
2014年护士工作总结范文
2014/11/11 职场文书
单方投资意向书
2015/05/11 职场文书
律政俏佳人观后感
2015/06/09 职场文书
培训后的感想
2015/08/07 职场文书
防震减灾主题班会
2015/08/14 职场文书
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
MySQL数据管理操作示例讲解
2022/12/24 MySQL