JS垃圾收集器是否清除堆栈内存?
Does the JS garbage collector clear stack memory?
根据对这个问题的第一条评论:
垃圾收集器是否清扫堆栈内存?根据我的阅读,通常 gc 不会这样做。
按照这个问题,我想堆栈和堆内存之间没有物理区别;有虚拟部门吗?我的意思是:当理论上所有堆栈内存都被使用而不会导致溢出并且之后将新内存分配给对象时会发生什么?
有人可以详细说明这实际上是如何工作的吗?
谢谢。
Does the garbage collector sweep stack memory?
没有。 garbage collector 只管理堆内存。当程序 returns 到该堆栈帧时,堆栈上的所有值都应该再次需要,因此不得收集它们。从栈到堆的引用确实被认为是存活的。
函数退出时stack memory会自动清除
当然,在像JavaScript这样的动态语言中,程序的哪些部分进入堆栈,哪些部分进入堆是不容易决定的。一些优化允许在堆栈上分配对象,而闭包可能需要在堆中分配变量环境。
I imagine that there is no physical difference between stack and heap memory; is there a virtual division?
没错。 "The stack" 只是计算机内存的一个(通常是固定大小的)区域,专供某些进程使用 "the stack"。事实上,你的内存中有很多堆栈,每个线程一个,解释器(例如 JS)也会创建自己的堆栈。
根据对这个问题的第一条评论:
垃圾收集器是否清扫堆栈内存?根据我的阅读,通常 gc 不会这样做。
按照这个问题,我想堆栈和堆内存之间没有物理区别;有虚拟部门吗?我的意思是:当理论上所有堆栈内存都被使用而不会导致溢出并且之后将新内存分配给对象时会发生什么?
有人可以详细说明这实际上是如何工作的吗? 谢谢。
Does the garbage collector sweep stack memory?
没有。 garbage collector 只管理堆内存。当程序 returns 到该堆栈帧时,堆栈上的所有值都应该再次需要,因此不得收集它们。从栈到堆的引用确实被认为是存活的。
函数退出时stack memory会自动清除
当然,在像JavaScript这样的动态语言中,程序的哪些部分进入堆栈,哪些部分进入堆是不容易决定的。一些优化允许在堆栈上分配对象,而闭包可能需要在堆中分配变量环境。
I imagine that there is no physical difference between stack and heap memory; is there a virtual division?
没错。 "The stack" 只是计算机内存的一个(通常是固定大小的)区域,专供某些进程使用 "the stack"。事实上,你的内存中有很多堆栈,每个线程一个,解释器(例如 JS)也会创建自己的堆栈。