【问题标题】:Find out if object is still in memory找出对象是否仍在内存中
【发布时间】:2015-08-30 00:52:58
【问题描述】:

有什么方法可以查明在代码中某处引用的 javascript 对象是否仍然存在并在内存中?

我问的原因是我的代码变得非常复杂,我添加了一些“清理”函数,这些函数应该清除一些引用,但我不确定它们是否正常工作。我能否以某种方式获取浏览器仍在使用的变量列表?

【问题讨论】:

  • 据我所知,在 JavaScript 中您无法执行清理功能,由浏览器决定何时执行。您能否进一步解释一下您所取得的成就?这个答案可能有用:stackoverflow.com/a/18913692/738968
  • 您可以说 JavaScript 会“自动”清理,但删除关键字可能是您要查找的内容
  • 如果您想检查“一个 javascript 对象”,这意味着您有对该对象的引用,对吧?那么是的,它仍然在内存中,因为你有它的引用。

标签: javascript html dom error-handling


【解决方案1】:

在 chrome 中,按 F12 打开调试器,然后执行以下操作:

  1. 点击[时间线]标签
  2. 点击左上角的【录制】按钮;玩弄您的网站、打开菜单、加载页面等,以检查您想要检查内存的位置。

  1. 仍在记录时,按下 [垃圾收集器] 并等待几秒钟,让缓冲区收集更多数据。现在再次按下 [record] 按钮停止录制。

  1. 一旦记录停止,您将看到内存分配到堆上的“阶梯”。
  2. 重要的是,在您点击 [垃圾收集] 按钮后,您应该会看到这些行归零。如果这没有发生,那么您可能有内存泄漏。

谷歌拥护者提供了一些非常详细的视频,解释了这个调试器功能,超出了这个简单答案的范围。这只是一个指向调试器功能的指针,您可能希望使用它来测试代码并查找堆上的对象以及它们是否按预期清理。

您可以使用 [配置文件] 选项卡对您的对象进行进一步分析。

【讨论】:

    【解决方案2】:

    JavaScript 是完全托管的语言,不允许任何类型的删除功能。[delete 关键字仅删除属性,但不会从内存中删除对象] 清理任何对象的最佳选择是分配给 null 以提示垃圾收集器仍然可能无法在所有情况下工作。 希望这会有所帮助

    【讨论】:

      猜你喜欢
      • 2019-03-09
      • 2021-04-15
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2017-01-26
      • 2020-04-20
      相关资源
      最近更新 更多