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运行的时候,这段过程还算不算内存泄漏呢?
(完)