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 相关文章推荐
jquery 表单取值常用代码
Dec 22 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
Jul 25 Javascript
客户端js判断文件类型和文件大小即限制上传大小
Nov 20 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
Mar 12 Javascript
JS实现的几个常用算法
Nov 12 Javascript
AngularJS自定义控件实例详解
Dec 13 Javascript
微信小程序左滑删除效果的实现代码
Feb 20 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
Mar 02 Javascript
使用JavaScript实现点击循环切换图片效果
Sep 03 Javascript
浅析 Vue 3.0 的组装式 API(一)
Aug 31 Javascript
微信小程序实现滚动Tab选项卡
Nov 16 Javascript
JavaScript最完整的深浅拷贝实现方式详解
Feb 28 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 设置MySQL连接字符集的方法
2011/01/02 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
php正则表达式学习笔记
2015/11/13 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
WebStorm ES6 语法支持设置&babel使用及自动编译(详解)
2017/09/08 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
Python实现的检测网站挂马程序
2014/11/30 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
python使用正则表达式提取网页URL的方法
2015/05/26 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
Python用61行代码实现图片像素化的示例代码
2018/12/10 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
canvas线条的属性详解
2018/03/27 HTML / CSS
H5 video poster属性设置视频封面的方法
2020/05/25 HTML / CSS
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
国旗下讲话演讲稿
2014/05/08 职场文书
教师敬业奉献模范事迹材料
2014/05/18 职场文书
施工工地安全标语
2014/06/07 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
python字符串的一些常见实用操作
2022/04/06 Python