GC与JS内存泄露(3)
作者:alucard 来源:Alibaba.com UED 发布时间:2010-09-25 19:01:00
标签:内存,js,javascript,IE
在IE 6中,对于javascript object内部,javascript使用的是mark-and-sweep算法,这点前面也有提到,因此,纯粹的javascript对象的使用,不会造成内存泄露,但是对于javascript object与外部object(包括native object和vbscript object等等)的引用时,IE 6使用引用计数,这样一来,内存泄露就产生了。这点在犀牛书第八章函数部分有提到。
以下是常见的几种javascript内存泄露的情况:
一、循环引用:
< html >
< head >
< script language = ” JScript ” >
var myGlobalObject;
function SetupLeak() // 产生循环引用,因此会造成内存泄露
{
// First set up the script scope to element reference
myGlobalObject = document.getElementById( ” LeakedDiv ” );
// Next set up the element to script scope reference
document.getElementById( ” LeakedDiv ” ).expandoProperty = myGlobalObject;
}
</ script >
</ head >
< body onload = ” SetupLeak() ” >
< div id = ” LeakedDiv ” ></ div >
</ body >
</ html >
我们可以看到,myGlobalObject指向了一个DOM对象,而这个DOM对象的一个属性又指向了myGlobalObject,循环引用出现,内存泄露,其原理如下:
解决方案很简单,在确保属性不再使用后,加入以下代码就可以了:
function BreakLeak() // 解开循环引用,解决内存泄露问题
{
document.getElementById( ” LeakedDiv ” ).expandoProperty = null ;
}
说起来容易,不过当我们程序非常复杂的时候,发现和修改就没有这么容易了。


猜你喜欢
- 同事在准备新老系统的切换,清空一个表的时候往往发现这个表的主键被另一个表用做外键,而系统里有太多层次的引用.所以清起来相当麻烦用下面这个脚本
- 导语为什么有这么一个简单的游戏?这个游戏如此受欢迎?仅仅是因为它在游戏行业异常匮乏的年代出现,从而成为了一代人的记忆吗?恐怕并不是。玩过俄罗
- 上次还是CSDN里的朋友回答的,我复制了下来。原文如下 =========================== 利用统计文章字数,然后达到一
- 使用ghost.py 通过搜搜 的微信搜索来爬取微信公共账号的信息# -*- coding: utf-8 -*-import sysrelo
- 春节前在蓝色理想上发了个“雅虎口碑招聘前端工程师 ”的启事,节后收到很多简历,加之HR通过专业招聘网站得到的简历和朋友同事推荐的简历,数量上
- 1.先用 for 循环取for item in l: if isinstance(item ,list): &nb
- 我就废话不多说了,大家还是直接看代码吧!import pymysqlimport pandas as pddef con_sql(db,sq
- 这段时间一直比较忙,一忙起来真感觉自己就只是一台挣钱的机器了(说的好像能挣到多少钱似的,呵呵);这会儿难得有点儿空闲时间,想把前段时间开发微
- 目录四种参数仅限关键字参数内省中的函数参数函数注解四种参数Python函数func定义如下:def func(first, *args, s
- 本文实例讲述了php基于协程实现异步的方法。分享给大家供大家参考,具体如下:github上php的协程大部分是根据这篇文章实现的:http:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 先看下效果图:指令是啥?按照惯例,先请出官方的解释:指令 (Directives) 是带有 v- 前缀的特殊特性。指令特性的值预期是单个 J
- 需求:需要在v-html的html字符串的button中绑定点击事件,需要点击后做一些操作,必须渲染成html,但是渲染后的html里面写绑
- 一. 访问WEB数据库的多种方案目前在WINDOWS环境下有多种访问WEB数据库的技术,主要有:1.公共网关接口CGI(Commo
- List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非你对它们进行排序或其他修改操作)
- 0、实现效果能够通过一张标准图,对同一组相机拍摄的照片进行清晰度评价。1、概述图像清晰度是用来指导调焦机构找到正焦位置的评价函数。理想的清晰
- 实例如下所示:#########start 获取文件路径、文件名、后缀名############def jwkj_get_filePath_
- 注:本文针对单个服务器上多块GPU的使用,不是多服务器多GPU的使用。在一些实验中,由于Batch_size的限制或者希望提高训练速度等原因
- MySQL用户和权限在MySQL中有一个系统自身就带有的数据库叫MySQL,数据库装好以后系统自带了好几个数据库MySQL就是其中过一个,M
- 本文实例为大家分享了微信小程序实现侧边导航栏的具体代码,供大家参考,具体内容如下效果图wxml<view class='pro