根据对此问题的第一条评论: What makes this function run much slower?
垃圾收集器是否清理堆栈内存?根据我的阅读,GC 通常不会这样做。
遵循这个问题,我认为堆栈内存和堆内存之间没有物理差异;有虚拟部门吗?我的意思是:当理论上所有堆栈内存都被使用而不会导致溢出并且之后将新内存分配给对象时会发生什么?
有人可以详细说明这实际上是如何工作的吗? 谢谢。
最佳答案
Does the garbage collector sweep stack memory?
没有。 garbage collector只管理堆内存。当程序返回到该堆栈帧时,预计将再次需要堆栈上的所有值,因此不得收集它们。从堆栈到堆的引用确实被认为是事件的。
stack memory当函数退出时自动清除。
当然,在像 JavaScript 这样的动态语言中,程序的哪些部分进入堆栈、哪些部分进入堆并不容易决定。一些优化允许在堆栈上分配对象,而闭包可能需要在堆中分配变量环境。
I imagine that there is no physical difference between stack and heap memory; is there a virtual division?
确实如此。 “堆栈”只是计算机内存的一个(通常是固定大小的)区域,专用于某个进程的“堆栈”。事实上,你的内存中有许多堆栈,每个线程一个,并且解释器(例如 JS)也会创建自己的堆栈。
关于javascript - JS垃圾收集器会清除堆栈内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31698747/