如何处理PHP中由“生成的内存泄漏”;新";课堂教学法

如何处理PHP中由“生成的内存泄漏”;新";课堂教学法,php,class,memory,Php,Class,Memory,我在flieindex.class.php中创建了以下类:- <?php class index{ public function loadTitle() { $title = "Welcome to My Website"; return $title; } } ?> 我的问题是因为页面上会有大量的文章和图片,我预计每天会有1500-2500名用户 我知道PHP有自己的垃圾收集器,但下面的UR

我在flie
index.class.php
中创建了以下类:-

<?php
class index{
        public function loadTitle() {
            $title = "Welcome to My Website";
            return $title;
        }
    }
?>
我的问题是因为页面上会有大量的文章和图片,我预计每天会有1500-2500名用户

我知道PHP有自己的垃圾收集器,但下面的URL吓坏了我:-

我在StackOverflow中看到了一些问题,说它确实会消耗内存,有些人建议使用
unset
功能,但我不知道怎么做

这是我的尝试:

我只需要打电话吗

<?php
    unset($obj); // At the end of the page, or where i will no more be using this object.
?>

或者我也必须设置空值

<?php
    $obj = NULL;
    unset($obj);
?>


上面的代码可以释放内存吗,还是我还需要做其他事情?请建议并教我

PHP具有自动垃圾收集功能。每次重新分配
$obj
,如果旧值不再可访问,其内存将被回收。因此,除非您将它们存储在某个位置,否则您将只能引用一个对象,而不是所有您创建的对象。

PHP具有自动垃圾收集功能。每次重新分配
$obj
,如果旧值不再可访问,其内存将被回收。因此,除非您将它们存储在某个位置,否则您将只能引用一个对象,而不是所有您创建的对象。

首先,您不需要一直取消设置变量。我见过人们在PhP脚本结束时取消设置所有变量,这是无用的

唯一需要取消设置变量的时间是,如果PhP中存在内存问题,并且可以销毁脚本中其他任何地方都不会使用的变量,但仍有很多事情要做(考虑时间或内存)

您可能还想看看:


首先,您不需要一直取消设置变量。我见过人们在PhP脚本结束时取消设置所有变量,这是无用的

唯一需要取消设置变量的时间是,如果PhP中存在内存问题,并且可以销毁脚本中其他任何地方都不会使用的变量,但仍有很多事情要做(考虑时间或内存)

您可能还想看看:


您应该研究PHP的垃圾收集器。如果需要,您甚至可以强制PHP收集垃圾:

<?php
gc_enable(); // Enable Garbage Collector
var_dump(gc_enabled()); // true
var_dump(gc_collect_cycles()); // # of elements cleaned up
gc_disable(); // Disable Garbage Collector
?>


来源:

您应该查看PHP的垃圾收集器。如果需要,您甚至可以强制PHP收集垃圾:

<?php
gc_enable(); // Enable Garbage Collector
var_dump(gc_enabled()); // true
var_dump(gc_collect_cycles()); // # of elements cleaned up
gc_disable(); // Disable Garbage Collector
?>



来源:

新的
可能重复的
不会泄漏内存,糟糕的程序员会泄漏内存。您不需要在页面末尾取消设置变量,当请求结束时,它们将被丢弃。但您确实需要注意在页面处理期间加载到内存中的数据量(例如,从DB加载的数据)。虽然所有这些都是没有意义的,直到你真正看到网站加载时间有问题。如果使用了太多的内存就是问题所在。解决方案不是“修复新内存泄漏”。解决方案是编写不会加载太多数据/膨胀的更好的代码。
new
的可能副本不会泄漏内存,糟糕的程序员会泄漏内存。您不需要在页面末尾取消设置变量,当请求结束时,它们将被丢弃。但您确实需要注意在页面处理期间加载到内存中的数据量(例如,从DB加载的数据)。虽然所有这些都是没有意义的,直到你真正看到网站加载时间有问题。如果使用了太多的内存就是问题所在。解决方案不是“修复新内存泄漏”。解决方案是编写不会加载太多数据的更好的代码/bloatwareb但是当不再需要
$obj
时,php怎么知道呢?我听到设置
$obj=NULL
将值设置为NULL,并使用
unset($obj)
进行垃圾收集。这不是真的吗?它不知道。但是它知道,
$obj
的前一个值不再是必需的,因为不再有变量引用它了。@johnsmith您真的想要这个问题的答案吗?如果是这样,首先了解垃圾收集是如何工作的。然后在文档中查找ApacheModu php用于垃圾收集的模式。点击这里:但是当不再需要
$obj
时,php怎么知道呢?我听到设置
$obj=NULL
将值设置为NULL,并使用
unset($obj)
进行垃圾收集。这不是真的吗?它不知道。但是它知道,
$obj
的前一个值不再是必需的,因为不再有变量引用它了。@johnsmith您真的想要这个问题的答案吗?如果是这样,首先了解垃圾收集是如何工作的。然后在文档中查找ApacheModu php用于垃圾收集的模式。单击此处:那么,是否没有真正的方法可以立即释放分配的
对象
变量
使用的内存?这很糟糕:(事实上,我不明白你的意思。你肯定可以释放变量使用的内存,但这意味着你丢失了变量的内容。我不确定我得到了你要找的内容,也许你应该检查我答案中的链接。那么,没有真正的方法可以立即释放赋值
对象
变量
使用的内存吗不好:(事实上,我不明白你的意思。你确实可以释放变量使用的内存,但这意味着你丢失了变量的内容。我不确定我得到了你想要的内容,也许你应该检查我答案中的链接。这就是我说的,就像java提供了强制垃圾收集选项。我想知道缺点或
d如果存在上述函数的
。@johnsmith:除非您有从s编写自己的垃圾收集机制的经验