node 中闭包内存如何释放
发布于 10 年前 作者 xuyufei 7801 次浏览 最后一次编辑是 8 年前

最近在用node做游戏服务器的开发,发现了闭包导致的内存泄漏问题。

举个例子

function aa(c)
 {  
   c(); 
 }

 

function bb()
 { 
  
  aa(function(){
     var obj_content={};//变量在回调函数内部
     for(var i=0;i<20000000;i++)
     {
       obj_content[i]=i;//添加对象内容
     }
     console.log(obj_content[1]);
     obj_content=null;//把变量设置为空也不能释放

  })
 }
bb();

setInterval(function(){console.log()},1000);

然后再Linux下运行,发现内存一直被占用,不能释放。

obj_content=null;这个代码已经把变量置为null了,但是内存为什么一直不能释放,等一两个小时还是占很大的内存,用delete删除对象属性也不可以。请问各位大侠,如何释放内存?????急急急

2 回复

如果是按照你现在这个函数的话,JS的垃圾回收机制会回收内存滴。obj_content这个对象已经成为孤岛了… 建议你用数组对象试试… var arr = new Array(); function aa© {

c();

} function OBJ(){ } function bb() {

aa(function(){ //var obj_content={};//变量在回调函数内部 arr.push(new OBJ()); for(var i=0;i<20000000;i++) { obj_content[i]=i;//添加对象内容 } console.log(obj_content[1]); //obj_content=null;//把变量设置为空也不能释放

  arr.splice(0,1);//假如第1个 删掉第1个

}) } bb();

setInterval(function(){console.log()},1000);

这个问题我已经知道答案了,node的GC是当开辟新内存地址的时候,才会去考虑回收以前的垃圾变量,这个段代码并没有开辟新内存,如果把setInterval(function(){console.log()},1000);改成setInterval(function(){

var obj1={};

for(var i=1;i<100;i++){

obj1[i]=i;

}},1000);内存就能回收额

回到顶部