1
我想了解unset()
如何處理類和它們的屬性。我寫了一個測試來查看內存使用情況。類別的PHP內存使用情況
class B {}
class A {
private $b;
public function __construct() {
$this->b = new B;
}
public function __destruct() {
unset($this->b);
}
}
echo memory_get_usage() . '<br/>';
$a = [];
for ($i = 0; $i < 5000; $i++) {
$a[$i] = new A;
}
echo memory_get_usage() . '<br/>';
for ($i = 0; $i < 5000; $i++) {
$a[$i]->__destruct();
unset($a[$i]);
}
unset($a);
echo memory_get_usage() . '<br/>';
我期待的是最後一次的內存使用應該與第一次相似。但它更高:
236184 (before)
2845320 (peak)
1219432 (after)
我真的不明白這是如何工作的。謝謝你的幫助!
注:我試圖使用__destruct(我們從不知道)的其他名稱,但不會改變任何東西。
以下是一些評論,我試着用memory_get_usage(true);結果是這樣的:
262144 (before)
3145728 (peak)
2359296 (after)
PHP的內存使用情況不像這樣確定性。 –
PHP *偶爾會運行垃圾回收,這裏的關鍵字偶爾會*。並非所有未使用的內存都會立即釋放。 – deceze
查看[memory_get_usage()](http://www.php.net/function.memory-get-usage)的描述,然後查看使用'real_usage'參數 –