作家
登录

如何处理JavaScript内存泄露

作者: 来源: 2017-10-26 09:46:23 阅读 我要评论

当函数调用其他函数的时刻,每一个函数被调用的时刻都邑获得本身的┞坊块。在本身的┞坊块里会保存函数内所有的变量,还有一个法度榜样计数器会记录变量履行时地点的地位。当函数履行完之后,会释放它的内存以作他用。

不幸的是,工作并不是那么简单,因为在编译的时刻我们并不知道一个变量将会须要若干内存。假设我们做了下面如许的事:

  1. int n = readInput(); //攫取用户的输入 
  2. ... 
  3. //创建一个有n个元素的数组 

编译器不知道这个数组须要若干内存,因为数组大年夜小取决于用户供给的值。

是以,此时不克不及在栈上分派空间。法度榜样必须在运行时向操作体系请求够用的空间。此时内存大年夜堆空间中被分派。静态与动态分派内存之间的不合鄙人面的表格中被总结出来:

如今我们来解释JavaScript中的第一步(分派内存)是若何工作的。

静态分派内存与动态分派内存的差别。

为了完全懂得动态内存是若何分派的,我们须要花更多的时光在指针上,这个可能很大年夜程度上偏离了这篇文┞仿的主题。如不雅你有兴趣进修更多的常识,那就在评论中让我知道,我就可以在之后的文┞仿中写更多关于指针的细节。

JavaScript中的内存分派

JavaScript在开辟者声明值的时刻主动分派内存。

  1. var n = 374; // 为数值分派内存 
  2. var s = 'sessionstack'; //为字符串分派内存 
  3.   
  4. var o = { 
  5.   a: 1, 
  6.   b: null 
  7. };  //为对象和它包含的值分派内存 
  8.   
  9. var a = [1, null'str']; //为数组和它包含的值分派内存 
  10.   
  11. function f(a) { 
  12.   return a + 3; 
  13. } //为函数(可调用的对象)分派内存 
  14.   
  15. //函数表达式也会分派一个对象 
  16. someElement.addEventListener('click'function() { 
  17.   someElement.style.backgroundColor = 'blue'
  18. }, false); 
  19.   
  20. //一些函数调用也会导致对象分派 
  21. `var d = new Date(); // allocates a Date object`   //分派一个Date对象的内存 
  22.   
  23. `var e = document.createElement('div');  //分派一个DOM元素的内存 
  24.   
  25. //办法可以分派新的值或者对象 
  26.   
  27. var s1 = 'sessionstack'
  28. var s2 = s1.substr(0, 3);  //s2是一个新的字符串 
  29. // 因为字符串是弗成变的 
  30. // JavaScript可能决定不分派内存 
  31. // 而仅仅存储 0-3典范围 
  32.   
  33. var a1 = ['str1''str2']; 
  34. var a2 = ['str3''str4']; 
  35. var a3 = a1.concat(a2); 
  36. //新的数组有4个元素是a1和a2连接起来的。 

在JavaScript中应用内存

想要快速的懂得客栈和内存的概念,可以浏览本系列第一篇文┞仿。


  推荐阅读

  微软雅黑升级:Windows 10 RS4快速预览版17025更新内容大全

沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!改良微软雅黑字体:正如大年夜中国Windows Insider会员收集的反馈,微软雅黑是用中文(简体)说话来显示Windows UI文本的字>>>详细阅读


本文标题:如何处理JavaScript内存泄露

地址:http://www.17bianji.com/lsqh/38229.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)