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 相关文章推荐
List all the Databases on a SQL Server
Jun 21 Javascript
JavaScript 常用函数库详解
Oct 21 Javascript
Javascript 闭包引起的IE内存泄露分析
May 23 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
Dec 16 Javascript
JS的document.all函数使用示例
Dec 30 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
Jun 27 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
Oct 17 Javascript
JS中dom0级事件和dom2级事件的区别介绍
May 05 Javascript
微信小程序 教程之wxapp 视图容器 view
Oct 19 Javascript
微信小程序 增、删、改、查操作实例详解
Jan 13 Javascript
jQuery实时统计输入框字数及限制
Jun 24 jQuery
Vue向后台传数组数据,springboot接收vue传的数组数据实例
Nov 12 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录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
JS实现的自定义右键菜单实例二则
2015/09/01 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
Django的models模型的具体使用
2019/07/15 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
教师绩效工资方案
2014/02/01 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
MySQL的存储过程和相关函数
2022/04/26 MySQL