Ajax内存泄漏(memory leak)的学习笔记

在《Ajax实战》中第8.3.1章节讲内存泄漏。书中示例代码与在《JavaScript高级程序设计(第2版)》第4.3.4章节中那个简单的示例代码相比要复杂多了。其中第242页中 removePet 示例代码应该是:

Person.prototype.removePet=function(petName){
	var orphan=this.pets[petName];
	this.pets[petName]=null;
	if(orphan.unassignOwner){
		orphan.unassignOwner(this);
	}
}

在这一个示例代码中,局部变量是:给了jim一个宠物猫实例 whiskers 引用的那一行:

jim.addPet(new Cat("whiskers");

全局变量是:给了jim 宠物狗 fido 引用的那一行:

var fido=new Dog("fido");
jim.addPet(fido);

fido 的引用占用着宝贵的内存,这就是内存泄漏的问题。直到第7步解除了引用,随后内存才能被释放

上行引起来的是第243页的最后一行最后一句。这个“随后”是指什么时候呢?按《JavaScript高级程序设计(第2版)》第4章的相关内容来看,是指下次 GC 运行的时候。

而《Ajax实战》书中原文说是第7步内存释放了,到底内存释放被 GC 回收了吗?这里我还心存疑义,从开全局变量空间 到解除引用,这段过程可以按书上说是发生了内存泄漏的问题。但是再到下次GC运行的时候,这段过程还算不算内存泄漏呢?

(完)

posted on 2010-02-22 15:56  豆豆の爸爸  阅读(2306)  评论(0编辑  收藏  举报