php请求结束时是否释放了所有内存?

php请求结束时是否释放了所有内存?,php,memory-management,memory-leaks,Php,Memory Management,Memory Leaks,在php中,为运行脚本分配的所有内存是在页面请求结束时释放的,还是我需要担心随着时间的推移内存会逐渐泄漏?是的,脚本终止后所有内存都会释放。但是,在基于某些算法的脚本编写过程中可能会发生内存泄漏。您可以使用unset()释放变量,但与vanneto的观点相反,它将释放变量。 我很确定GC会自动为您完成这项工作。(它甚至关闭打开的mysql连接)PHP确实通过构建对象等方式释放了您声称的内存。仍然存在内存未释放的情况。为此,在5.3版中引入了垃圾收集的原理 您可以使用gc_enable()函数来

在php中,为运行脚本分配的所有内存是在页面请求结束时释放的,还是我需要担心随着时间的推移内存会逐渐泄漏?

是的,脚本终止后所有内存都会释放。但是,在基于某些算法的脚本编写过程中可能会发生内存泄漏。您可以使用
unset()
释放变量,但与vanneto的观点相反,它将释放变量。


我很确定GC会自动为您完成这项工作。(它甚至关闭打开的mysql连接)

PHP确实通过构建对象等方式释放了您声称的内存。仍然存在内存未释放的情况。为此,在5.3版中引入了垃圾收集的原理


您可以使用gc_enable()函数来执行它。默认情况下,PHP中的垃圾收集不处于活动状态。

否。您不需要手动释放(调用
unset()
)资源。PHP将自动执行此操作。在请求生命周期结束时,所有内容都将免费。所以,不,你不需要为此烦恼。如果您这样做:

<?php
$resource = allocate_heavy_resource();
?>

$resource
将在请求结束时释放,因此不会泄漏内存。如果是这样的话,那就意味着PHP中有一个严重的错误,任何关于正常操作的讨论都会通过窗口进行

编辑:
当然也有例外。比如持久数据库连接。但是这些最终都会得到处理,所以这并不是一个真正的问题。

在缓存东西时会发生内存泄漏。因此,如果php脚本中存在内存泄漏,那么apache进程将随着时间的推移而增加,您可以在多次请求后重新启动它们。检查您的多处理模块(MPM)通常是预工作模块或辅助模块


但在大多数情况下,除非您使用PHP进行大量处理,否则这不会对您产生太大影响

使用太多内存怎么会导致内存泄漏?PHP使用的内部缓存如何?它们是否总是在每次请求后发布?@ta.speot.is-您想到了哪些内部缓存?像APC这样的缓存的全部目的是在它们之间保存编译后的代码和数据requests@MarkBakerPHP内部使用的任何可能在请求之间保持的缓存。@ta.speot.is Memory!=一旦请求结束,cache.PHP将释放所有内存。它不会泄漏内存。但是,您可以在脚本中达到
内存\u限制,但这是另一回事。您的意思是存在这样一种情况:我在一个请求中分配一个资源,它将持续到第二个请求?我想看一个例子。我没看到你能在另一个请求中使用内存。我说它并不总是被释放,当然也不是立即释放。如果您需要共享内存,您应该使用其他工具(例如,对于缓存,我建议使用APC)。