龙空技术网

七爪源码:Javascript 中的内存管理

庄志炎 156

前言:

当前小伙伴们对“js内存堆栈”大致比较着重,姐妹们都需要分析一些“js内存堆栈”的相关文章。那么小编同时在网上网罗了一些关于“js内存堆栈””的相关资讯,希望同学们能喜欢,我们快快来学习一下吧!

Javascript 是一种高级语言,其 GC(垃圾收集)由现代浏览器(Javascript 引擎)完成。 这给 Javascript 开发人员一个印象,即他们不需要知道幕后发生的事情,也不需要做任何事情来改善他们的 Javascript 应用程序的内存管理。 像 C 语言这样的低级语言更快更高效的原因之一是因为我们可以手动控制 GC,因此它们在内存管理方面更加优化和高效。

Javascript内存管理的三个主要部分包括:

1)当我们给一个变量赋值时,它会自动分配一个可用的内存块来存储这个值,并用引用链接到这个变量。

2) 然后在脚本中使用此变量。

3)当一个变量不再使用(或引用被删除)时,堆中的内存将被自动释放以防止内存泄漏。

如上所述,Javascript 使用 Mark and Sweep 算法进行内存管理。 基本上,它将标记脚本使用的内存引用,并清除其余部分。

var apple = {  color: 'red',  category: 'fruits'}

var apple = {

color: 'red',

category: 'fruits'

}

apple = 10

在某些情况下,垃圾收集无法释放未使用的内存并导致内存泄漏。作为 Javascript 开发人员,我们可以做一些事情来阻止它们。内存泄漏的三个最常见原因是:

1) 事件监听器

当 DOM 元素从 DOM 树中分离并且不再在 Javascript 中引用它时,事件侦听器将被自动删除。但是,IE 等较旧的浏览器将无法正确处理此问题。此外,我们还应该仔细规划事件监听器的使用,因为它们在事件触发之前大部分时间都不会使用,并且当这些 DOM 元素处于活动状态时它们会占用内存。

2) 全局变量

Javascript 中总是有一个全局对象,例如浏览器中的“窗口”对象和 Node.js 中的“全局”对象。我们应该尽量避免使用全局变量,因为当全局执行上下文仍在堆栈中时它们将始终存在。这个全局执行上下文是在执行任何代码之前创建的,因此这些全局变量将始终被附加而不是被垃圾收集。再次,计划很重要。尝试在阻塞范围内使用用“let”和“const”定义的局部变量(不是“var”,如果我们用“var”声明,它将成为全局对象的一部分),例如在函数中。当函数调用从堆栈中弹出时,函数中的局部变量会自动清除。

3)在后台持续运行的东西

我们在使用 setInterval() 等函数时也应该小心。当我们在回调函数中使用变量时,该变量将始终被附加并且不会被清除。

结论:

在执行之前进行规划,甚至是分配变量的逻辑。这将有助于提高应用程序的性能,尤其是在扩展时。

如果您想查看更多与 Web 开发或软件工程相关的内容,请关注我。

关注七爪网,获取更多APP/小程序/网站源码资源!

标签: #js内存堆栈 #js清除浏览器内存 #html内存 #js获取对象内存地址