如何在JavaScript中管理内存和收集垃圾

103 阅读3分钟

JavaScript没有提供太多的内存管理或垃圾回收,因为我们不能直接使用与内存有关的操作,但为了了解情况,知道它是如何操作的是很好的。

在C语言中,开发人员通过malloc()、calloc()、realloc()和free()方法手动分配或取消内存。

JavaScript的工作原理是在创建对象或字符串后分配数值;并在过程结束后自动释放,所以这整个过程被称为垃圾回收。内存管理的生命周期是基于3个步骤。

  1. 内存的分配
  2. 内存的利用
  3. 释放内存

JavaScript中的内存分配

在引入变量后,JavaScript为其分配的变量分配了内存。当内存不再有用时,内存就会被释放。当内存被释放时,那么就会出现一些问题,包括内存的泄漏。最困难的任务是发现那些没有用的内存,然后在垃圾收集器的帮助下有效地删除这些内存。垃圾收集器跟踪不需要的内存,但最困难的任务是跟踪未使用的内存。

如果你给变量声明了值,那么JavaScript中的内存分配就会自动分配。

在这些例子中,variable1为一个数字分配了内存,而字符串则被分配在variable2的内存中,如下所示。

var variable1 = 100;
var variable2 = "Memory Allocation";

如果你想为众多对象分配内存,那么请使用以下代码。

var variable3 = {

variable4: 5,

variable5: 'Test'

}

在变量6的内存中分配数组,如下图所示:

var variable6 = [1,2,3,4,5]

你也可以为不同的方法分配内存。下面是为一个方法分配内存的代码。

function function_name(x) {

return x + 20;

}

垃圾收集器

内存分配和不需要时释放内存的过程被称为垃圾收集。算法被用来找出哪些内存与任务无关。本节明确讨论了用于垃圾收集的主要算法和它们的局限性。

参考计数垃圾收集算法

参考计数垃圾收集算法被看作是垃圾收集的伟大的基本排序。这种算法不仅决定任何资源是否重要,它还对内存进行过滤,以决定一个项目是否有一些其他实例引用它。一个有空引用的实例被视为垃圾。

标记和扫除算法

每当一个实例无法访问时,垃圾收集器就会帮助释放内存,而不是对一个对象的零引用。最初,垃圾收集器会搜索所有全局或根实例以及它们的对象引用。通过这种算法,收集器将区分可到达和不可访问的实例。随后,不可触及的实例将被垃圾收集器自动收集。

总结

JavaScript有效地分配了内存,随后,垃圾收集器帮助检测这些分配的内存,并在内存没有用的时候回收它。我们在这篇文章中学习了如何在JavaScript中管理内存和收集垃圾。我们需要注意的是,我们必须实现软件程序,不能造成对变量的循环引用。我们必须确保我们不能编写任何会把变量扔出垃圾循环的程序。