【问题标题】:Do we need to free memory in php?我们需要在 php 中释放内存吗?
【发布时间】:2014-03-25 12:21:15
【问题描述】:

我们真的需要通过我们创建的对象来释放内存吗?还是 PHP 自己处理这个?

到目前为止,我在 c 中使用过free(),在 c++ 中使用过delete

【问题讨论】:

  • 简短回答:不。现实的答案:这取决于。实际答案:有点不清楚你在问什么。
  • 感谢您的回复,但我不认为它不清楚。就像我们如何在 c++ 中创建对象并在使用后删除一样。正如你在这里所说,这不是必需的。但我不知道为什么。那我们为什么不需要同样的机制呢?
  • 当你不再需要某个对象时,当然可以删除它以释放一些内存(使用unset($object)$object = null),但你无法控制真正的内存使用情况PHP解释器,你也不必自己做垃圾收集。
  • 您是关注整体内存管理还是只关注对象?您对“对象”的定义是基于 C 或 PHP 还是您自己对“对象”的解释?

标签: php memory memory-management


【解决方案1】:

不,我们基本上不需要释放内存,因为 php 在脚本结束后会自动进行垃圾收集。

【讨论】:

  • 脚本运行时也会这样做。
【解决方案2】:

您无法实际控制 PHP 中的内存分配。 PHP 在您创建和销毁变量时分配内存并释放内存。所以:不,您不能手动释放内存,也不必这样做。

话虽如此,您可以通过在任何时候在范围内有多少变量/这些变量保存多少数据来间接控制已用内存。如果您的脚本遇到内存问题,您需要优化您存储的内容,这些变量被丢弃的位置和时间,以便 PHP 可以释放相关的内存。

例如这样会吃掉大量的内存:

$var = file_get_contents('really_large_file');

另一方面,这不会:

$fh = fopen('really_large_file', 'r');
$aFewBytes = fread($fh, 1024);

这是您在 PHP 中“管理内存”的方式。你决定做什么。要了解每个操作需要多少内存,您需要了解幕后发生的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2014-02-18
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多