Javascript垃圾收集器未清除对象

Javascript垃圾收集器未清除对象,javascript,object,memory,Javascript,Object,Memory,我花了几天的时间在网上搜索、谷歌搜索和阅读文章,但我一辈子都想不出如何避免内存泄漏。我写了一个快速演示,看看这里发生了什么: var SelectMap=function(画布,onComplete){ 变量大小=[3,3]; var s=39;//边长 var p=1;//填充 var color=['#3D5AFE','#F57F17'] var ctx=canvas.getContext(“2d”); var cursor=null; canvas.width=尺寸[0]*(s+p);

我花了几天的时间在网上搜索、谷歌搜索和阅读文章,但我一辈子都想不出如何避免内存泄漏。我写了一个快速演示,看看这里发生了什么:

var SelectMap=function(画布,onComplete){
变量大小=[3,3];
var s=39;//边长
var p=1;//填充
var color=['#3D5AFE','#F57F17']
var ctx=canvas.getContext(“2d”);
var cursor=null;
canvas.width=尺寸[0]*(s+p);
canvas.height=尺寸[1]*(s+p);
canvas.addEventListener('mousemove',悬停);
canvas.addEventListener('click',click);
render();
功能点击(e){
onComplete(数学地板(cursor.x/(s+p)),数学地板(cursor.y/(s+p));
破坏();
}
函数悬停(e){
cursor={x:Math.abs(e.clientX-canvas.offsetLeft),y:Math.abs(e.clientY-canvas.offsetTop)}
render();
}
函数render(){
clearRect(0,0,canvas.width,canvas.height)
对于(变量x=0;x
归功于@JonasW

他提到垃圾收集器只会在有数据要收集的情况下收集数据,而不会获得千字节的数据。我修改了我的代码笔,创建了25MB的无用数据,结果它工作了。保存的代码笔最终创建了千字节的数据,每运行一个go()类型,然后将其删除。这就是它的意图,每次运行时都要去掉25MB


谢谢

让舒尔充满你的记忆,否则大多数收藏家不会真正收集much@Jonas他们不应该收集我的SelectMap对象中的变量吗?换句话:你说的@Jonas_W是什么意思?为什么收集器应该收集它?你的应用程序可能不需要内存,所以为什么要花费时间(=性能)来获取不需要的内存在我正在编写的实际软件中,我的内核出现了恐慌(safari是罪魁祸首,但Firefox没有响应),但我明白你的意思。如何测试GC?