锁定老帖子 主题:关于在JS里删除变量 销毁所占内存 的讨论
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-14
引用 因为这个对象可能 要一直循环,所以要设置为null啊,不然的话,循环一次JS 有创建了一个新的对象,
for (var i = 0; i < waveDataLength; i++) { array = waveData[i].split(","); point = 1 / array.length; for (var j = 0; j < array.length; j++) { num = i + Math.round((point * j) * 10) / 10; item = parseFloat(array[j]); dataArray.push([num, item]); num = null;item=null; } array = null; item = null; point = null; } 这一块array如果不设置为NUll的时候,他会一直创建一个新的地址引用、 array, item, point 这3个变量是声明在函数里的吗?只要不是window级变量,那么会函数在执行完成后,这些变量将会被GC收集掉。 像下面的代码不用担心内存回收问题: function test(){ var a = 123; a = [1,2,3]; a = {1:1, 2:2, 3:3}; } test(); |
|
返回顶楼 | |
发表时间:2011-04-14
个人觉得没有必要=null
|
|
返回顶楼 | |
发表时间:2011-04-14
clue 写道 JS中,如果一个对象不能被访问到,那就会被GC回收。
通常是不用特意去把局部变量置null的 除非,有全局变量直接或间接引用(例如闭包引用了当前环境并被存储)、与Dom对象循环引用,这时就需要主动去断开引用,以便GC回收。 然后,IE还有一些比较恶心的问题,比如节点删除用removeNode会泄漏、IE Object leaks、一些特定的Dom节点必定会泄漏等等,还是建议发代码专门分析, 完整代码是这样的 确实是在上面声明的: var dataArray = new Array(); var array = null, point = null, num = null,item = null; var waveDataLength = waveData.length; for (var i = 0; i < waveDataLength; i++) { array = waveData[i].split(","); point = 1 / array.length; for (var j = 0; j < array.length; j++) { num = i + Math.round((point * j) * 10) / 10; item = parseFloat(array[j]); dataArray.push([num, item]); num = null;item=null; } array = null; item = null; point = null; } array = null; item = null; point = null; num = null; item=null; |
|
返回顶楼 | |
发表时间:2011-04-14
zuoming99 写道 引用 因为这个对象可能 要一直循环,所以要设置为null啊,不然的话,循环一次JS 有创建了一个新的对象,
for (var i = 0; i < waveDataLength; i++) { array = waveData[i].split(","); point = 1 / array.length; for (var j = 0; j < array.length; j++) { num = i + Math.round((point * j) * 10) / 10; item = parseFloat(array[j]); dataArray.push([num, item]); num = null;item=null; } array = null; item = null; point = null; } 这一块array如果不设置为NUll的时候,他会一直创建一个新的地址引用、 array, item, point 这3个变量是声明在函数里的吗?只要不是window级变量,那么会函数在执行完成后,这些变量将会被GC收集掉。 像下面的代码不用担心内存回收问题: function test(){ var a = 123; a = [1,2,3]; a = {1:1, 2:2, 3:3}; } test(); |
|
返回顶楼 | |
发表时间:2011-04-14
另外,那个IE下的CG函数可以释放多少内存啊,效率有多高,用了貌似没啥效果、
|
|
返回顶楼 | |
发表时间:2011-04-14
再次强调不需要设为null也不需要显式调用GC,如果内存增长太大就仔细检查自己所有的DOM操作,基本上只有DOM操作才有引发内存泄露的可能性
|
|
返回顶楼 | |
发表时间:2011-04-14
int08h 写道 再次强调不需要设为null也不需要显式调用GC,如果内存增长太大就仔细检查自己所有的DOM操作,基本上只有DOM操作才有引发内存泄露的可能性
OK |
|
返回顶楼 | |
发表时间:2011-04-14
要相信js引擎,悲剧的都是DOM而不是js的内置对象
DOM就很难说了,天天出内存泄露,快麻木了 |
|
返回顶楼 | |
发表时间:2011-04-14
int08h 写道 要相信js引擎,悲剧的都是DOM而不是js的内置对象
DOM就很难说了,天天出内存泄露,快麻木了 悲剧啊 到时候 画图天天要和dom打交道了 惨不忍睹 |
|
返回顶楼 | |
发表时间:2011-04-15
createElement的时候还是要设 NULL不然gc 回收不了
其实到现在我还是没找到怎么去测试是否释放 |
|
返回顶楼 | |