JavaScript中的内存泄露

不像C语言,内存的管理是由程序员去控制的(析构函数),javascript的内存管理是托管的,系统的垃圾回收机制会帮助程序员作内存的管理,但并不是说这样做就没有内存泄露的危险了,js引擎的垃圾回收机制会将运行环境下所有不能及的变量标明“待回收”标志,等待回收。可是程序中也会存在死链接,试举一个小例子

js 代码
 
  1. /**若girl A永远喜欢Jim,这种情况是有的,而girl B在Jim不喜欢她的情况下就放弃喜欢Jim ,  
  2.  * 我们讨论当girl C出现的时候,Jim放弃喜欢A and B,而去喜欢了C*/  
  3. var Man= function (){  
  4.     this.name="Jim";  
  5.     this.behavior = function (){alert("Jim will not love A and B any more because C is coming...");}  
  6.       
  7. }  
  8.   
  9. var Girl_A=function (){  
  10.     this.name="A";  
  11.     this.boyFriend;  
  12.     this.behavior = function (parameter){  
  13.         this.boyFriend = new Man();  
  14.         alert("Love Jim forever");  
  15.         };  
  16. }  
  17.   
  18. var Girl_B=function (){  
  19.     this.name="B";  
  20.     this.boyFriend;  
  21.     this.behavior = function (parameter){  
  22.         if(parameter){  
  23.             this.boyFriend = new Man();       
  24.             alert("Will not love Jim any more");  
  25.         }  
  26.         else{  
  27.             this.boyFriend=null;  
  28.             alert("Love Jim for he love me");             
  29.         }  
  30.     }  
  31. }  
  32.   
  33. function main(){  
  34.     var man = new Man();  
  35.     man.behavior();  
  36.     var girl_a = new Girl_A();  
  37.     girl_a.behavior();  
  38.     var girl_b = new Girl_B();  
  39.     girl_b.behavior(true);/**表示B由外界因素知道Jim不再喜欢她这件事情是事实*/  
  40.     /**因为girl a and b 已经从这场"Love Battle"中退出了,所以将她们的空间释放掉*/  
  41.     girl_a= null;  
  42.     girl_b = null;  
  43.       
  44. }  

从这段代码看到当A和B均已经释放掉了自己所占有的空间的时候,因为A仍然对Jim持有那份‘love ’(TMD,说的我自己的鸡皮疙瘩都出来了),所以它通过Man这个关联仍然是可达的,所以它的空间仍然被持有,并没有被释放,所以这就造成了内存泄露。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值