美文网首页
JavaScript的内存分配

JavaScript的内存分配

作者: freck1e | 来源:发表于2018-01-24 18:11 被阅读0次

基本类型值和引用类型值

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

基本数据类型Undefined、 Null、 Boolean、 Number 和 String是按值访问的,因为可以操作保存在变量中的实际的值。

引用类型的值是保存在内存中的对象。当复制保存着对象的某个变量时,操作的是对象的引用。但在为对象添加属性时,操作的是实际的对象。


栈和堆

与基本类型值和引用类型值对应的两种数据结构。

栈是一种先入先出的数据结构,可以通过JavaScript的数组来模拟栈

var arr = [];     //创建一个栈

arr.push("apple");    // ["apple"]

arr.push("banana");    // ["apple","banana"]

arr.pop();    //  ["apple"]

arr.push("banana");    // ["apple","banana"]

基本类型值就是存储在栈内的简单数据段,即基本类型值存储在变量访问的位置。

堆是存放数据的基于散列算法的数据结构,在JavaScript中,引用值是存放在堆中的。

引用值是存储在堆中的对象,也就是说,存储在变量处的值(即指向对象的变量,存储在栈中)是一个指针,指向存储在堆中的实际对象。

变量num,bol,str为基本数据类型,它们的值,直接存放在栈中,obj,person为复合数据类型,他们的引用变量存储在栈中,指向于存储在堆中的实际对象。

由上图可知,我们无法直接操纵堆中的数据,也就是说我们无法直接操纵对象,但我们可以通过栈中对对象的引用来操作对象。

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

相关文章

  • javascript内存管理

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

  • JavaScript 内存分配

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

  • JavaScript - 内存分配

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

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

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

  • JavaScript的内存分配

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

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

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

  • Javascript 内存机制

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

  • JS JavaScript事件循环机制

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

  • JavaScript---变量内存分配

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

  • JavaScript内存机制

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

网友评论

      本文标题:JavaScript的内存分配

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