在JS中释放数组

hanyuxinting 2010-02-20 04:22:58
今天看到这样一个说法:

内存泄漏,释放数组的所有元素,不是a = [] , 而是 a.length = 0。

我之前释放数组的时候都是用的第一种方法。不知道上述描述是否正确?

另外,JS中数组到底是如何释放所有元素的?还请各位指点~

谢谢~
...全文
1095 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanyuxinting 2010-02-21
  • 打赏
  • 举报
回复
引用 6 楼 operfume 的回复:
我是这样实现的:a是数组

var obj;
for(var i=a.length-1;i>=0;i--){
  obj = a.pop();
  obj.free();
  obj = null;
}
不会产生内存释漏


这种会不会太复杂,我觉得JS本身自己是有这样的内置方法来处理的。
hanyuxinting 2010-02-21
  • 打赏
  • 举报
回复
好的,谢谢各位~~~~~~
橘子香水 2010-02-20
  • 打赏
  • 举报
回复
我是这样实现的:a是数组

var obj;
for(var i=a.length-1;i>=0;i--){
obj = a.pop();
obj.free();
obj = null;
}
不会产生内存释漏
浴火_凤凰 2010-02-20
  • 打赏
  • 举报
回复
不太清楚,还没有研究过这种情况
Click_Me 2010-02-20
  • 打赏
  • 举报
回复

1.内存垃圾回收的关注点在于引用.只要切断引用垃圾回收机制就会扫描到. 如果是考虑内存的话,我认为
a = null就可以了.

2.如果从内存分配考虑 a = [];这样的话 是将a的指针地址修改指向了空数组.而原来分配在堆里面的值在下一次内存回收的时候由于没有地址引用就会自动回收了.应该就不占有资源了.
hanyuxinting 2010-02-20
  • 打赏
  • 举报
回复
引用 1 楼 click_me 的回复:
JScript code
不太明白楼主具体想要获得什么知识点?1. 内存泄露和释放数组 不知道有什么直接联系? 只要变量脱离作用域, 那么当JS一定时间进行内存扫描后就会自动回收.2. 所谓数组(引用类型)那么引用类型就是保存着一个指向堆值的一个指针. 所以你可以将指针更改到一个新的空数组即a= []; 也可以直接操作内置属性a.length=0; 都是将数组的元素清空.


1. 考虑定义的数组是全局变量的情况,数组没有释放可能会引发内存泄露;

2. 如果指针指向一个新的空数组的话,那之前的数组是否被清掉?是否还占用资源?
真哥哥 2010-02-20
  • 打赏
  • 举报
回复
我用的都是a.length=0的这种!
Click_Me 2010-02-20
  • 打赏
  • 举报
回复

不太明白楼主具体想要获得什么知识点?
1. 内存泄露和释放数组 不知道有什么直接联系? 只要变量脱离作用域, 那么当JS一定时间进行内存扫描后就会自动回收.

2. 所谓数组(引用类型)那么引用类型就是保存着一个指向堆值的一个指针. 所以你可以将指针更改到一个新的空数组即a = []; 也可以直接操作内置属性a.length = 0; 都是将数组的元素清空.

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧