电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JS常見內(nèi)存泄漏及解決方案解析

瀏覽:104日期:2024-05-06 10:31:00

內(nèi)存泄漏?

官方解釋:內(nèi)存泄漏(Memory Leak)是指程序中己動態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內(nèi)存的浪費,導致程序運行速度減慢甚至系統(tǒng)崩潰等嚴重后果。

通俗點就是指由于疏忽或者錯誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存,不再用到的內(nèi)存卻沒有及時釋放,從而造成內(nèi)存上的浪費。

避免內(nèi)存泄漏?

在局部作用域中,等函數(shù)執(zhí)行完畢,變量就沒有存在的必要了,垃圾回收機制很虧地做出判斷并且回收,但是對于全局變量,很難判斷什么時候不用這些變量,無法正?;厥?;所以,盡量少使用全局變量。在使用閉包的時候,就會造成嚴重的內(nèi)存泄漏,因為閉包中的局部變量,會一直保存在內(nèi)存中。

內(nèi)存溢出?

當程序運行需要的內(nèi)存超過了剩余的內(nèi)存時, 就出拋出內(nèi)存溢出的錯誤。例如下面的代碼,謹慎試用,可能會卡窗口。。。。

var obj = {}for (var i = 0; i < 100000; i++) {obj[i] = new Array(10000000)}console.log(’------’)

常見的js內(nèi)存泄漏

1. 意外的全局變量

在js中,一個未聲明變量的使用,會在全局對象中創(chuàng)建一個新的變量;在瀏覽器環(huán)境下,全局對象就是window:

function foo() {a = ’test’}// 上面的寫法等價于function foo() {window.a = ’test’}

function foo() {this.a = ’test’// 函數(shù)自身發(fā)生調(diào)用,this指向全局對象window}foo();

上面的a變量應該是foo()內(nèi)部作用域變量的引用,由于沒有使用var來聲明這個變量,這時變量a就被創(chuàng)建成了全局變量,這個就是錯誤的,會導致內(nèi)存泄漏。

解決方式: 在js文件開頭添加 ‘use strict’,開啟嚴格模式。(或者一般將使用過后的全局變量設置為 null 或者將它重新賦值,這個會涉及的緩存的問題,需要注意)

<script> 'use strict'; console.log('這是嚴格模式。'); </script> <script>  console.log('這是正常模式。'); </script>

2. 計時器和回調(diào)函數(shù)timers

定時器setInterval或者setTimeout在不需要使用的時候,沒有被clear,導致定時器的回調(diào)函數(shù)及其內(nèi)部依賴的變量都不能被回收,這就會造成內(nèi)存泄漏。

解決方式:當不需要interval或者timeout的時候,調(diào)用clearInterval或者clearTimeout

3. DOM泄漏

1)給DOM對象添加的屬性是一個對象的引用

var a = {};document.getElementById(’id’).diyProp = a;

解決方法:在window.onload時間中加上 document.getElementById(’id’).diyProp = null;

2)元素引用沒有清理

var a = document.getElementById(’id’);document.body.removeChild(a);// 不能回收,因為存在變量a對它的引用。雖然我們用removeChild移除了,但是還在對象里保存著#的引用,即DOM元素還在內(nèi)存里面。

解決方法: a = null;

3)事件的綁定沒有移除

解決方法: 移除時間的監(jiān)聽

4. js閉包

閉包在IE6下會造成內(nèi)存泄漏,但是現(xiàn)在已經(jīng)無須考慮了。值得注意的是閉包本身不會造成內(nèi)存泄漏,但閉包過多很容易導致內(nèi)存泄漏。閉包會造成對象引用的生命周期脫離當前函數(shù)的上下文,如果閉包如果使用不當,可以導致環(huán)形引用(circular reference),類似于死鎖,只能避免,無法發(fā)生之后解決,即使有垃圾回收也還是會內(nèi)存泄露。

這個,另外找個時間詳細說明一下,這里就不贅述了

5. console

控制臺日志記錄對總體內(nèi)存內(nèi)置文件的影響,也是個重大的問題,同時也是容易被忽略的。記錄錯誤的對象,可以將大量的數(shù)據(jù)保留在內(nèi)存中。傳遞給console.log的對象是不能被垃圾回收,所以沒有去掉console.log可能會存在內(nèi)存泄漏

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | 无线对讲-无线对讲系统解决方案-重庆畅博通信 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 贵州水玻璃_-贵阳花溪闽兴水玻璃厂| 智慧钢琴-电钢琴-便携钢琴-数码钢琴-深圳市特伦斯乐器有限公司 | 高压直流电源_特种变压器_变压器铁芯-希恩变压器定制厂家 | 齿式联轴器-弹性联轴器-联轴器厂家-江苏诺兴传动联轴器制造有限公司 | 电镀标牌_电铸标牌_金属标贴_不锈钢标牌厂家_深圳市宝利丰精密科技有限公司 | 垃圾处理设备_餐厨垃圾处理设备_厨余垃圾处理设备_果蔬垃圾处理设备-深圳市三盛环保科技有限公司 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 电子书导航网_电子书之家_电子书大全_最新电子书分享发布平台 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 一体式钢筋扫描仪-楼板测厚仪-裂缝检测仪-泰仕特(北京) | 有福网(yofus.com)洗照片冲印,毕业聚会纪念册相册制作个性DIY平台 | 二手回收公司_销毁处理公司_设备回收公司-找回收信息网 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 桁架楼承板-钢筋桁架楼承板-江苏众力达钢筋楼承板厂 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 逗网红-抖音网红-快手网红-各大平台网红物品导航 | pbootcms网站模板|织梦模板|网站源码|jquery建站特效-html5模板网 | 挖掘机挖斗和铲斗生产厂家选择徐州崛起机械制造有限公司 | 纸箱抗压机,拉力机,脂肪测定仪,定氮仪-山东德瑞克仪器有限公司 | 气胀轴|气涨轴|安全夹头|安全卡盘|伺服纠偏系统厂家-天机传动 | 卫生人才网-中国专业的医疗卫生医学人才网招聘网站! | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 保定市泰宏机械制造厂-河北铸件厂-铸造厂-铸件加工-河北大件加工 | IHDW_TOSOKU_NEMICON_EHDW系列电子手轮,HC1系列电子手轮-上海莆林电子设备有限公司 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 三板富 | 专注于新三板的第一垂直服务平台 | 热工多功能信号校验仪-热电阻热电偶校验仿真仪-金湖虹润仪表 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 |