再被需要时。在具有垃圾回收机制的语言（如C#、Java和Lisp）中，当变量出了其作用域再也不能被引用时运行环境会自动地回收对象。在不具有垃圾回收机制的语言当中，如C语言，程序（程序员）必须显式地分配内存，而且用完之后还要释放内存。如果没有这样做会造成内存泄漏，在这种情况下，程序运行过程中堆会逐渐消耗，最终因为内存耗尽而崩溃。当一个变量指向动态创建的数据结构时，可能其中一些部分只能通过变量间接的访问。在这种环境下，垃圾回收器（或者类似的语言特性）必须处理当变量回收时只有一部分内存能够获得的情况。