JavaScript - 内存分配

作者: liuxuan | 来源:发表于2016-10-24 20:33 被阅读103次

在ECMAScript中,变量可以存放两种类型的值

  • 原始值

  • 引用类型值

原始值指的是代表原始数据类型的值,例如:undefined null number string boolean

引用类型指的是复合类型值,例如:object function array 自定义对象

堆和栈

  • 栈是一种LIFO的数据结构,即后进先出,队列是一种FIFO的数据结构,即先进先出

  • 堆是基于散列算法存放数据的一种数据结构

  • 原始值是存放在栈中的简单数据段,它们的值直接存储在变量访问的位置,例如:


var num = 10;      //变量名num和初始化值10都存放在栈中

  • 引用值是存放在堆中的对象,引用值的变量名是一个存放在栈中指针,指向堆中的引用值对象,例如:

var obj = new object();    //变量名obj存放在栈中,而它指向的object()对象是存放在堆中的

为什么原始值要放在栈中,引用值要放在堆中?

  • 先看一段代码

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,"笨蛋的座右铭",25);

  • 内存分析
内存分析图内存分析图
  • 原始类型变量num bol str的变量名和内容都存放在栈中

  • 引用类型变量obj arr person的变量名作为指针存放在栈中,指向堆中的变量内容

由上图可以看出,我们不能直接操作堆中的数据,也就是说不能直接操作对象,但我们可以通过栈中存放的变量指针来进行操作

  • 为什么要分堆和栈

堆比栈大,栈比堆的运算速度快,对象是一个复杂的结构,并且可以自由扩展,如:数组可以无限扩充,对象可以自由添加属性。将他们放在堆中是为了不影响栈的效率。而是通过引用的方式查找到堆中的实际对象再进行操作。相对于简单数据类型而言,简单数据类型就比较稳定,并且它只占据很小的内存。不将简单数据类型放在堆是因为通过引用到堆中查找实际对象是要花费时间的,而这个综合成本远大于直接从栈中取得实际值的成本。所以简单数据类型的值直接存放在栈中

总结

  • 两种变量类型:原始值和引用类型值

  • 变量在内存中的存放位置分为堆和栈

相关文章

  • javascript内存管理

    内存声明周期 分配你所需要的内存 使用分配的内存(读写) 不再需要时释放内存 内存分配 javascript在声明...

  • JavaScript 内存分配

    栈和堆 栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈(后进先出,...

  • JavaScript - 内存分配

    在ECMAScript中,变量可以存放两种类型的值 原始值 引用类型值 原始值指的是代表原始数据类型的值,例如:u...

  • 内存管理:垃圾回收机制

    JavaScript 的内存分配 在使用值之前我们需要为其分配内存,使用的过程,实际上是对分配内存进行读取和写入的...

  • JavaScript的内存分配

    基本类型值和引用类型值 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。 基本数据类型Un...

  • 谈谈js中的内存机制——垃圾回收机制

    内存管理机制就是分配内存管理,每种编程语言都有它的内存管理机制,JavaScript的内存管理机制是:内存基元在变...

  • JavaScript---变量内存分配

    今天来看一下JavaScript在定义变量的时候是如何给变量分配内存的 ECMAScript变量包含两种类型:基本...

  • Javascript 内存机制

    前言: javascript不同于底层语言,在javascript中的内存都是自动分配和回收。如同请了人打扫家中的...

  • JS JavaScript事件循环机制

    JS JavaScript事件循环机制 首先区分进程和线程 进程是cpu资源分配的最小单位(系统会给它分配内存) ...

  • JavaScript内存机制

    JavaScript不同于其他语言,在JavaScript中的内存都是自动分配和回收。如同请人打扫卫生。其实在大多...

网友评论

本文标题:JavaScript - 内存分配

本文链接:https://www.haomeiwen.com/subject/qzwluttx.html