简短的回答:
PHP 使用引用计数,因此对象一旦没有被引用就会被释放。如果存在引用循环(例如,对象 A 引用对象 B,对象 B 又引用对象 A),垃圾收集器会不时处理它们。
当脚本结束时,所有剩余的内存都返回给系统。
长答案:
脚本终止时是否自动释放内存?如果没有,什么时候会。
只要不再引用对象/变量,就会在脚本执行期间释放内存。
如果由于某种原因在脚本末尾仍然引用了对象,它们将被强制销毁和释放。
然后,内存分配器被重置(这会释放少量剩余分配的内存,就像分配器自己的缓存一样)。
因此,在脚本结束时,所有内容都被释放并再次可供分配。
如果分配器用于mmap()
在内部分配内存段(这是 mmap() 可用时的默认设置),那么大块的取消分配和内存分配器的重置也会将内存返回给系统。
我需要隐式释放对象吗?
不。只要确保垃圾收集器已启用,以便处理引用循环。
是否可以从脚本中一次释放一点内存
PHP 使用引用计数,并在不再引用对象时释放对象:
$a = new stdClass;
$a = null; // the object is freed at this point
function foo () {
$a = new stdClass;
return; // the object referenced by $a is freed at this point
}
手动收集引用周期可能会更早地释放一些内存,尽管通常没有必要。
是不是1024M太多了,长期下来对服务器有什么影响。
如果您在单独的进程中运行这个占用大量内存的脚本,这不会影响服务器。