JavaScript-Algorithms
JavaScript-Algorithms copied to clipboard
执行test后,说一说,堆栈发生了啥变化,最后c的内存会被回收吗?
function test() {
var a = 1;
var b = {};
var c = {a: a};
return c;
}
执行test后,说一说,堆栈发生了啥变化,最后c的内存会被回收吗?
答案是什么?可以告知一下吗?如果方法的执行结果被一个变量接收,C就不会被回收,如果直接执行就会回收?
- test函数入栈
- 栈内存中创建a,对应的值为1
- 堆内存中开辟一块内存放b指向的那个对象,假设内存地址是0x0000;栈内存中创建b,值为0x0000
- 堆内存中开辟一块内存放c指向的那个对象,假设内存地址是0x1111;栈内存中创建c,值为0x1111
- test函数执行结束,a=1; b=0x0000; c=0x1111出栈,test函数出栈
- 此时c指向的那块内存不再被用到,则被当做垃圾回收。
如果执行方式不是test(), 而是 var d = test() ,c也一样会被回收。
很强,明白了,c会回收,但是如果var d= test()的话0x1111这个对象实不会被回收的,因为被d引用了
利用process.memoryUsage通过实验发现即使将test()的执行结果赋值给变量d,分配给c的内存还是会被回收,不明白为什么? @xixizhangfe
利用process.memoryUsage通过实验发现即使将test()的执行结果赋值给变量d,分配给c的内存还是会被回收,不明白为什么? @xixizhangfe
d 是挂载到global上面的嘛?
利用process.memoryUsage通过实验发现即使将test()的执行结果赋值给变量d,分配给c的内存还是会被回收,不明白为什么? @xixizhangfe
当赋值给d这一行代码也执行过后,整个程序就结束了,内存自然要被回收。不回收的话不就造成内存泄露了么?