【发布时间】:2019-06-15 20:00:15
【问题描述】:
在下面的 JS 代码中,example1 或 example2 是否会被垃圾收集器清除?他们的内存会被 GC 释放吗?我正在处理内存泄漏,我的代码中有一些这样的实例。
example1 = 'Outside a function'
function sample(x){
example2 = 'Inside a function'
}
sample(1)
据我了解,垃圾收集器不会清除这两个变量,因为它们被视为全局变量。可能听起来像一个微不足道的问题,但发现内存泄漏就像大海捞针
【问题讨论】:
-
您的问题不清楚。垃圾收集器不会清除变量。你能澄清一下你的意思吗?
-
@JörgWMittag 做了一些修改,这样更有意义吗?
-
并非如此。就像我写的:垃圾收集器不会清理变量。因此,不清楚您所说的“在以下 JS 代码中,
example1或example2是否会被垃圾收集器清理?”和“垃圾收集器永远不会清理任何变量”。 -
首先,停止使用未在某个范围内显式声明的变量。这只是一种不好的做法,如果您按照应有的方式运行严格模式,它甚至会是一个错误。重复 - 不好的做法。使用
var、let或const显式声明所需范围内的每个变量。仅当任何仍在运行的代码无法再访问该变量时,垃圾收集器才会清理任何范围内的变量的内容。因此,如果某些代码仍然可以访问您的变量,那么垃圾收集器将不会清理该变量的内容。 -
攻击内存泄漏的常用方法是记录堆快照,然后比较它们以找出两个快照之间的差异,看看这是否是您所期望的,或者是否有一些东西似乎在不断累积。这是 nodejs 中的how to do that。
标签: javascript node.js memory-leaks