当前位置: 首页 > 知识库问答 >
问题:

javascript - 内存泄漏怎么排查到具体代码?

傅穆冉
2024-05-25

切换页面之后发现内存一直在增长,应该是内存泄漏了,拍了快照想追踪是哪里内存没有被回收掉,但是不知道该怎么去看。

如下图图一,是不是“保留的大小”这一列占据比例越大说明越说明内存没有被释放?排名第一的是Object是不是说明有很多变量没有被回收?但是打开Object,如下图图二,下面的所有Object又都是0%,这是代表都被回收了?那为什么上方总的Object是7%啊,不太明白
image.png
image.png

我拍快照是首先点一下垃圾回收按钮,然后在A页面点开始快照拍一张,然后再切换到B页面,再拍一张快照,不知道这种拍快照方式是不是对的?另外页面切换有几十兆的内存增长是正常的吗?

共有1个答案

彭飞虎
2024-05-25
  1. 得是内存完全无法回收才是“内存泄漏”。
  2. JS 因为 GC 并不受控制,所以一般来说都是引擎认为需要回收才会回收。内存回收需要消耗资源,所以不会一直运行。比如你的内存很大,你的应用虽然占了不少,但比例上来看并不高,那么 GC 可能也不会运行。
  3. 同样的道理,你只是截图,也未必能证明泄漏。
  4. 基本上,JS 内存泄漏的标志是,你一直用,它就一直涨,涨到后来开始卡,甚至崩溃。
  5. JS 内存泄漏排查比较困难,一般要不断缩小范围,很难直接找到问题。
 类似资料:
  • 本文向大家介绍内存泄漏和内存溢出是什么?一般怎么处理内存泄漏?相关面试题,主要包含被问及内存泄漏和内存溢出是什么?一般怎么处理内存泄漏?时的应答技巧和注意事项,需要的朋友参考一下 (1)内存溢出(OOM)和内存泄露(对象无法被回收)的区别。 (2)引起内存泄露的原因 (3)内存泄露检测工具 ------>LeakCanary 内存溢出 out of memory:是指程序在申请内存时,没有足够的内

  • 代码的jsfiddle如下:http://jsfiddle.net/4qhr2/ 然而,我不清楚如何使用谷歌Chrome的分析器来验证这是,事实上的情况。堆探查器快照中出现了无数的东西,我不知道如何解码什么是好的/坏的。到目前为止,我在它上面看到的教程要么告诉我“使用快照分析器”,要么给我一个关于整个分析器如何工作的非常详细的宣言。是否可以仅仅将探查器作为一个工具,或者我真的必须了解整个事情是如何

  • 本文向大家介绍什么是内存泄漏?相关面试题,主要包含被问及什么是内存泄漏?时的应答技巧和注意事项,需要的朋友参考一下 答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

  • 本文向大家介绍怎么保证多人开发进行内存泄漏的检查(内存分析 工具)相关面试题,主要包含被问及怎么保证多人开发进行内存泄漏的检查(内存分析 工具)时的应答技巧和注意事项,需要的朋友参考一下 使用xcode里面的Analyze进行静态分析 build setting ----》 automa ----》 mrc环境 product ----》 analyze ----》command + R 为避免不

  • 问题内容: 我认为我的android应用正在泄漏内存。我不是绝对确定这是问题所在。 应用程序打开时经常崩溃,并且logcat尝试加载位图图像时会显示“内存不足”异常。 崩溃后,我重新打开了该应用程序,它运行正常。Logcat会显示许多“ gc”,并且JIT表会不时地向上调整大小,而不会向下调整,直到应用程序因内存不足错误而崩溃。 这听起来像是内存泄漏吗?如果是这样,我该如何定位和关闭泄漏点。 这是

  • 问题内容: 我一直在追寻内存泄漏(由“ valgrind –leak-check = yes”报告),它似乎来自ALSA。这段代码已经存在于自由世界中一段时间​​了,所以我猜这是我做错的事情。 输出看起来像这样: 并继续一些页面 这是由于我在一个项目中使用ALSA并开始看到这种巨大的泄漏……或者至少是所说泄漏的报告。 所以问题是:是我,ALSA或valgrind在这里遇到问题吗? 问题答案: ht