JS内存分配——栈和堆

      

JavaScript中的变量分为两种, 原始值和引用值。原始值指的是原始数据类型的值,比如undefined,null,number,string,boolean类型所表示的值。引用值指的是复合数据类型的值,即Object,Function,Array等。

  原始值和引用值存储在内存中的位置分别为栈和堆。原始值是存储在栈中的简单数据段,他们的值直接存储在变量访问的位置。引用值是存储在堆中的对象。

存储在栈中的值是一个指针,指向存储在堆中的实际对象。     

[html] view plain  copy
print?

< span   style

"font-size:14px;"

function Person(id,name,age){    1. this.id  =  id ;    1. this.name  =  name ;    1. this.age  =  age ;    1. }    1. var  num  =  10 ;    1. var  bol  =  true ;    1. var  str  =  "abc" ;    1. var  obj  =  new  Object();    1. var  arr  = ['a','b','c'];    1. var  person  =  new  Person(100,"jxl",22); </ span

  

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

         栈的优势就是存取速度比堆要快,存放在一级缓存中,仅次于直接位于CPU中的寄存器,但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

         堆的优势是可以动态地分配内存大小,存在二级缓存中,生存期也不必事先告诉编译器,垃圾收集器会自动地收走这些不再使用的数据,比如对象和数组是可以无限拓展的,正好放在可以动态分配大小的堆中。但是缺点是由于在运行时动态分配内存,所以存取速度较慢。

代码交流 2021