Memory management 基于堆栈的内存分配

Memory management 基于堆栈的内存分配,memory-management,garbage-collection,stack,Memory Management,Garbage Collection,Stack,关于,它被称为“…每个线程都有一个被称为其堆栈的保留内存区域。当函数执行时,它可能会将一些状态数据添加到堆栈顶部;当函数退出时,它负责从堆栈中删除该数据”和“…当函数退出时,堆栈上的内存会自动且非常高效地回收” 第一个引用的句子表示当前线程负责,第二个引用的句子表示其自动完成 问题1:是自动完成的还是由当前运行的线程完成的 问题2:内存的释放是如何在堆栈中进行的?问题1通过自动(并且非常有效)的方式,他们的意思是,只要移动内存指针(切断堆栈顶部),就可以回收在堆栈中使用的所有内存。不需要复杂的垃

关于,它被称为“…每个线程都有一个被称为其堆栈的保留内存区域。当函数执行时,它可能会将一些状态数据添加到堆栈顶部;当函数退出时,它负责从堆栈中删除该数据”“…当函数退出时,堆栈上的内存会自动且非常高效地回收”

第一个引用的句子表示当前线程负责,第二个引用的句子表示其自动完成

问题1:是自动完成的还是由当前运行的线程完成的


问题2:内存的释放是如何在堆栈中进行的?

问题1通过自动(并且非常有效)的方式,他们的意思是,只要移动内存指针(切断堆栈顶部),就可以回收在堆栈中使用的所有内存。不需要复杂的垃圾收集

问题2:堆栈只是由开始指针和结束指针分隔的连续内存块。指针之间的所有内容都属于堆栈,结束指针之外的所有内容都被视为可用内存。您可以通过移动结束指针(堆栈顶部)来分配和取消分配内存在堆上,事情要复杂得多,内存使用是分散的。

问题1:是的


问题2:通过减少堆栈指针,即分配的反向操作。

回答问题1:是的,它是由垃圾收集器自动完成的,因为它是始终与jvm一起运行的守护进程。它检查所有引用,如果它们没有引用(或无法访问),则会将其从堆中删除


问题2的答案:由于局部变量和方法调用将在超出范围后立即存储在堆栈中,因此它们将从堆栈中删除。

堆栈由编译器管理


堆由库管理。

您可以通过查看a的示例(例如在许多机器上的C中)了解更多信息.

堆栈释放和分配不需要垃圾收集器。在JVM出现之前,编译器已经做了几十年了;)我知道堆栈释放和分配不需要垃圾收集器。显然,如果线程没有运行,它既不分配也不释放内存。堆由库?任何编程语言的内置库?如果是,请指定已知语言的库名称。