JavaScript垃圾回收(一)——内存分配

简介:  从静态存储区域分配内存。程序编译的时候内存已经分配好了,并且在程序的整个运行期间都存在,如静态变量和全局变量。

一、静态分配( Static Allocation )


  从静态存储区域分配内存。程序编译的时候内存已经分配好了,并且在程序的整个运行期间都存在,如静态变量和全局变量。

  如下面这张网上找的图:把房间看做一个程序,我们可以把静态分配的内存当成是房间里的耐用家具。通常,它们无需释放和回收,因为没人会天天把大衣柜当作垃圾扔到窗外。

  

image.png

 


二、自动分配( Automatic Allocation )


  在栈中为局部变量分配内存的方法,栈中的内存可以随着代码块退出时的出栈操作被自动释放。例如在执行函数时,函数内局部变量的存储单元可以在栈上创建,函数结束时这些存储单元自动被释放。

  如下面这张网上找的图:这类似于到房间中办事的人,事情一旦完成,就会自己离开,而他们所占用的空间,也随着这些人的离开而自动释放了。


  image.png


  栈是一种后进先出的数据结构,在javascript中可以通过Array来模拟栈的行为。


    var arr = []; //创建一个栈
    arr.push("apple");//压入元素"apple" ["apple"]
    arr.push("orange");//压入元素"orange"   ["apple","orange"]
    arr.pop();//弹出"orange"      ["apple"]
    arr.push("banana");//压入元素"banana"   ["apple","banana"]
    console.log(arr);


  与之对应的内存图:


  image.png

  用firefox打印出的结果如下:

  image.png

 


三、动态分配( Dynamic Allocation )

  在堆中动态分配内存空间以存储数据的方式。也就是程序运行时用malloc或new申请的内存,我们需要自己用free或delete释放。

  如下面这张网上找的图:堆中的内存块好像我们喝过的空瓶等,用过了就得扔到垃圾箱里,否则屋内就会满地狼藉。

  image.png


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


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,"pwstrick",25);


  image.png

 

懒人们都希望有一台家用机器人跟在身边打扫卫生。

在软件开发中,如果你懒得释放内存,那么你也需要一台类似的机器人——一个由特定算法实现的垃圾收集器。而正是垃圾收集机制本身的一些缺陷,导致了javascript内存泄露。

相关文章
|
25天前
|
前端开发 JavaScript 算法
JavaScript 内存管理的秘密武器:垃圾回收(下)
JavaScript 内存管理的秘密武器:垃圾回收(下)
JavaScript 内存管理的秘密武器:垃圾回收(下)
|
25天前
|
前端开发 JavaScript 算法
JavaScript 内存管理的秘密武器:垃圾回收(上)
JavaScript 内存管理的秘密武器:垃圾回收(上)
JavaScript 内存管理的秘密武器:垃圾回收(上)
|
1月前
|
存储 JavaScript 前端开发
JavaScript知识总结 终结篇--面向对象,垃圾回收与内存泄漏
JavaScript知识总结 终结篇--面向对象,垃圾回收与内存泄漏
|
1月前
|
Web App开发 存储 JavaScript
【JavaScript】垃圾回收与内存泄漏
JavaScript的*垃圾回收机制*是一种自动化的内存管理机制,用于检测和回收不再使用的内存资源,以便重新分配给其他需要的部分。JavaScript中的垃圾回收器负责跟踪和管理内存的分配和释放,使开发人员无需手动管理内存。 *内存泄漏*指的是程序中分配的内存空间无法被释放和回收,并且随着时间推移导致可用内存逐渐减少。
36 0
|
2月前
|
存储 JavaScript 算法
JS——垃圾回收的原理
JS——垃圾回收的原理
|
2月前
|
JavaScript 前端开发 算法
JS垃圾回收的原理
JS垃圾回收的原理
24 0
|
2月前
|
Web App开发 JavaScript 前端开发
JavaScript 性能优化:举例说明如何避免内存泄漏。
JavaScript 性能优化:举例说明如何避免内存泄漏。
28 1
|
2月前
|
JavaScript 算法 前端开发
|
3月前
|
JavaScript 前端开发 算法
JavaScript 内存管理和 垃圾回收机制
JavaScript 内存管理和 垃圾回收机制
30 0
|
6月前
|
存储 JavaScript 前端开发
js中数组是如何在内存中存储的?
js中数组是如何在内存中存储的?
99 0

相关产品

  • 云迁移中心