CNode

node 中闭包内存如何释放

Xxuyufei发布于13 年前最后回复13 年前2 回复8730 浏览0 收藏

最近在用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)

X
xuyufei#1·13 年前
引用 sdfcbs91如果是按照你现在这个函数的话,JS的垃圾回收机制会回收内存滴。obj content这个对象已经成为孤岛了... 建议你用数组对象试试.. var arr = new Array(); fun...

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

var obj1={};

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

obj1[i]=i;

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

S
sdfcbs91#2·13 年前

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

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);

参与回复
登录后即可参与回复。登录