Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
haizhilin2013 opened this issue May 17, 2019 · 12 comments
Open

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

haizhilin2013 opened this issue May 17, 2019 · 12 comments
Labels
js JavaScript

Comments

@haizhilin2013
Copy link
Collaborator

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

@haizhilin2013 haizhilin2013 added the js JavaScript label May 17, 2019
@wenyejie
Copy link

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

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

@myprelude
Copy link

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

@yuqingc
Copy link

yuqingc commented Jul 1, 2019

递归,循环引用,闭包

@cyj1209
Copy link

cyj1209 commented Sep 13, 2019

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

@blueRoach
Copy link

blueRoach commented Jul 1, 2020

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

@bozaigao
Copy link

bozaigao commented Oct 4, 2020

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

@MrZ2019
Copy link

MrZ2019 commented Oct 10, 2020

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

@HNHED
Copy link

HNHED commented Sep 4, 2021

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

@github-cxtan
Copy link

  1. 递归
  2. 闭包
  3. 死循环

@xiaoqiangz
Copy link

闭包、死循环、定时器。

1 similar comment
@xiaoqiangz
Copy link

闭包、死循环、定时器。

@never123450
Copy link

在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
Labels
js JavaScript
Projects
None yet
Development

No branches or pull requests