我知道“垃圾回收”是一种内存管理形式,它是一种自动回收未使用内存的方法。
但是什么是“内存分配”和“垃圾收集”的概念区别呢?
发布于 2012-02-08 04:17:41
它们是两极对立面。所以,是的,有很大的区别。
分配内存是申请内存空间以存储内容的过程。
垃圾收集(或释放内存)是将该内存释放回可用内存池的过程。
许多较新的语言在声明/初始化变量时都会在后台为您执行这两个步骤,并超出范围。
发布于 2012-02-08 04:17:34
内存分配是向系统请求一些内存以用于某些用途的行为。
垃圾收集是一个检查以前分配的一些内存是否不再真正在使用(即不再可以从程序访问)以自动释放它的过程。
一个微妙的地方是the objective of garbage collection is not actually "freeing objects that are no longer used", but to emulate a machine with infinite memory,允许你继续分配内存,而不关心释放它;因此,它不能代替管理其他类型的资源(例如,文件句柄,数据库连接,等等)。
发布于 2012-02-08 04:22:01
一个简单的伪代码示例:
void myFoo()
{
LinkedList<int> myList = new LinkedList<int>();
return;
}这将在堆上请求足够的新空间来存储LinkedList对象。然而,当函数体结束时,myList就消失了,您无论如何也不再知道这个LinkedList存储在哪里(内存地址)。因此,绝对没有办法告诉系统释放该内存,并使其在以后再次可用。
Java垃圾收集器将自动为您做这件事,代价是一些性能,并且还引入了一些不确定性(您不能真正知道何时调用GC )。
在C++中,没有本机垃圾收集器(到目前为止?)。但是管理内存的正确方法是使用smart_pointers (例如,std::auto_ptr (在C++11中已弃用)、std::shared_ptr等。
https://stackoverflow.com/questions/9183197
复制相似问题