【发布时间】:2013-01-04 07:20:09
【问题描述】:
在 php 中,分配给运行我的脚本的所有内存是在我的页面请求结束时释放的,还是我需要担心随着时间的推移内存泄漏?
【问题讨论】:
-
PHP 会在请求结束后释放所有内存。它不会泄漏内存。但是,您可以在脚本中联系
memory_limit,但那是另一回事了。
标签: php memory-management memory-leaks
在 php 中,分配给运行我的脚本的所有内存是在我的页面请求结束时释放的,还是我需要担心随着时间的推移内存泄漏?
【问题讨论】:
memory_limit,但那是另一回事了。
标签: php memory-management memory-leaks
没有。您无需手动释放(调用unset())资源。 PHP 将自动执行此操作。在请求生命周期结束时,一切都将被释放。所以不,您不需要需要为此烦恼。如果你这样做:
<?php
$resource = allocate_heavy_resource();
?>
$resource 将在请求结束时被释放,因此这不会泄漏内存。如果确实如此,则意味着 PHP 中存在严重错误,并且任何关于正常操作的讨论都会通过窗口进行。
编辑: 当然,也有例外。就像持久的数据库连接一样。但这些最终都会得到处理,所以它并不是真正的memory leak。
【讨论】:
PHP 确实释放了您通过构建对象等方式声明的内存。仍然存在未释放内存的情况。为此在 5.3 版本中引入了垃圾回收的原理。
您可以使用 gc_enable() 函数来执行它。 PHP 中的垃圾收集默认情况下是不活动的。
【讨论】:
有点,当缓存东西时会发生内存泄漏。因此,如果您的 php 脚本中有内存泄漏,您的 apache 进程会随着时间的推移而增加,您可以在收到这么多请求后重新启动它们。检查您的多处理模块 (MPM) 通常是 prefork 或 worker。
大多数情况下,除非您使用 PHP 进行大量处理,否则这不会对您产生太大影响
【讨论】:
是的,脚本终止后会释放所有内存。但是,基于某些算法,在您的脚本期间可能会发生内存泄漏。您可以使用unset() 来释放变量,但与vanneto 的观点相反,它将使用not actually free up the memory。
【讨论】:
【讨论】: