【问题标题】:Does reassigning a javascript variable empty its previous value from memory right away?重新分配 javascript 变量是否会立即从内存中清空其先前的值?
【发布时间】:2013-12-23 09:26:18
【问题描述】:

假设在全局窗口范围内如下:

var myvar = "initial value";
//some other code
myvar = "new value";

分配新值后旧值是否会从内存中销毁? 是否会被垃圾收集?我的分析测试表明内存立即被释放。

在函数范围内声明时同样的问题。

var myfunct = function(){
  var myvar = "initial value";    
  //some other code
  myvar = "new value";
}

PS:一般不需要回答垃圾回收问题。我已经了解它是如何工作的......我只是在这个问题的内存重新分配方面之后。我知道全局变量永远不会被收集。但我很好奇内存重新分配是否也会从根本上得到不同的处理。

【问题讨论】:

  • 这是一个取决于每个浏览器的实现细节,它与javascript(ECMAScript)本身无关。参与浏览器设计细节的人可能知道,但他们不太可能访问这里。
  • @RobG 我显然很清楚这些观察结果。 GC 收集方法可能会有所不同,但我不认为在这种情况下,立即发布的内容因引擎而异...

标签: javascript memory-management garbage-collection


【解决方案1】:

由于 javascript 中的字符串是不可变的,而字符串变量是引用,因此不会发生“内存重新分配”。

如何以及何时释放死值完全取决于 GC。 AFAIK 标准对这方面的实现几乎没有限制,我不相信有“立即发布”之类的概念。因此,正如 RobG 所指出的,很难说任何笼统的东西

【讨论】:

  • 好的。我现在实际上在我的 Chrome 测试中看到了 GC(var 为 500Kb)。我认为它最初是跳过它,因为覆盖值相同或几乎相同。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-04-24
  • 2017-10-20
  • 2014-05-22
  • 1970-01-01
  • 2015-08-27
  • 2017-09-26
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多