Skip to content

[js] 第32天 造成内存泄漏的操作有哪些? #116

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

第32天 造成内存泄漏的操作有哪些?

Activity

wenyejie

wenyejie commented on May 31, 2019

@wenyejie

以前使用"引用计数"的时候, 还挺多的,
现在都使用"标记清除"好很多了
最起码循环引用之类的, 不会再内存泄漏了

我觉得比较可能的是, 创建了时间循环, setInterval, 但是没有没有释放掉, 这个比较容易造成内存泄漏

myprelude

myprelude commented on Jun 13, 2019

@myprelude
  • 死循环
  • 过度递归
  • 对页面中的一些 副作用没有清除
yuqingc

yuqingc commented on Jul 1, 2019

@yuqingc

递归,循环引用,闭包

cyj1209

cyj1209 commented on Sep 13, 2019

@cyj1209

现在的GC好像是越来越牛逼了,有时候感觉无效的闭包都能被回收掉(还没有做过测试)
1 闭包
2 无效的全局变量
3 addEventListener
4 setInterval
5 还有一种是递归的时候不用尾调用优化,如果层级比较深的话会造成内存消耗激增,有时候还会崩,但是只要递归完成了这些内存是会被释放的。

blueRoach

blueRoach commented on Jul 1, 2020

@blueRoach
  • 在低版本IE使用闭包时,如果没有把声明的对象销毁就会一直存在内存中
  • 递归
  • 定时器,没有clear的情况
bozaigao

bozaigao commented on Oct 4, 2020

@bozaigao

GC回收有两种实现方式:标记清除、引用计数
1、没有使用的全局变量;
2、闭包(闭包可以维持函数内部变量);
3、循环引用(引用计数不为0);
4、setInterval没有被清除;

smile-2008

smile-2008 commented on Oct 10, 2020

@smile-2008

死循环
过度递归
对页面中的一些 副作用没有清除

HNHED

HNHED commented on Sep 4, 2021

@HNHED

闭包
意外的全局变量
被遗忘的定时器
脱离dom的引用

github-cxtan

github-cxtan commented on Feb 23, 2022

@github-cxtan
  1. 递归
  2. 闭包
  3. 死循环
xiaoqiangz

xiaoqiangz commented on May 31, 2022

@xiaoqiangz

闭包、死循环、定时器。

xiaoqiangz

xiaoqiangz commented on May 31, 2022

@xiaoqiangz

闭包、死循环、定时器。

never123450

never123450 commented on Sep 5, 2023

@never123450

在JavaScript中,可能会出现内存泄漏的操作有以下几种情况:

  1. 无限制的计时器或回调函数:如果创建了定时器或回调函数,并且没有正确清除或取消它们,它们会持续占用内存资源,导致内存泄漏。

  2. 未释放的DOM引用:在操作DOM元素时,如果保留了对这些元素的引用,即使元素已经被从页面中移除,引用仍然存在,从而导致内存泄漏。

  3. 闭包:当函数内部引用了外部函数的变量,即使外部函数执行完毕,这些变量仍然被闭包引用,导致内存无法释放。

  4. 大量数据的缓存:如果在应用程序中缓存了大量数据,而这些数据在后续的使用中不再需要,但仍然保留在内存中,就会造成内存泄漏。

  5. 循环引用:如果对象之间存在循环引用,即对象A引用了对象B,而对象B又引用了对象A,这会导致垃圾回收器无法正确释放内存,造成内存泄漏。

为了避免内存泄漏,可以采取以下措施:

  • 及时清除不再使用的定时器和回调函数。
  • 在操作DOM元素后,确保及时删除对它们的引用。
  • 避免过度使用闭包,确保正确释放不再需要的引用。
  • 注意缓存数据的大小和生命周期,及时清理不再需要的数据。
  • 避免循环引用,确保对象之间的引用关系能够正确释放。

通过合理的内存管理和资源释放,可以避免内存泄漏问题,提高应用程序的性能和稳定性。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @smile-2008@wenyejie@haizhilin2013@never123450@bozaigao

        Issue actions

          [js] 第32天 造成内存泄漏的操作有哪些? · Issue #116 · haizlin/fe-interview