5

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

4

5 回答 5

4

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

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

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

编辑:当然有例外。就像持久的数据库连接一样。但这些最终都会得到处理,所以它并不是真正的内存泄漏

于 2013-01-21T09:10:43.503 回答
1

是的,脚本终止后会释放所有内存。但是,基于某些算法,在您的脚本期间可能会发生内存泄漏。您可以使用unset()释放变量,但与 vanneto 的观点相反,它实际上不会释放内存

于 2013-01-21T08:59:42.700 回答
1

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

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

于 2013-01-21T09:06:38.287 回答
1

有点,内存泄漏发生在缓存事物时。因此,如果您的 php 脚本中存在内存泄漏,您的 apache 进程将随着时间的推移而增加,您可以在收到这么多请求后重新启动它们。检查您的多处理模块 (MPM) 通常是 prefork 或 worker。

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

于 2013-01-21T09:11:24.270 回答
0

PHP 使用垃圾收集器。它释放所有没有引用的变量。

http://v1.srcnix.com/2010/02/10/7-tips-to-prevent-php-running-out-of-memory/

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

于 2013-01-21T09:03:32.830 回答