|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2020-03-18 12:05 UTC] tomas914 at gmail dot com
[2020-03-18 14:14 UTC] cmb@php.net
-Status: Open
+Status: Not a bug
-Assigned To:
+Assigned To: cmb
[2020-03-18 14:14 UTC] cmb@php.net
[2020-07-07 10:31 UTC] robert at korulczyk dot pl
[2020-07-07 11:09 UTC] cmb@php.net
-Status: Not a bug
+Status: Re-Opened
-Type: Bug
+Type: Documentation Problem
-Assigned To: cmb
+Assigned To:
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 21:00:01 2025 UTC |
Description: ------------ I'm developing an app which uses storage with fairly large amount of objects that are created from unserialized cached data. Objects properties are set by iterating through get_object_vars() which causes extremely high memory usage. Provided is reduced test case for reproducing this issue. The difference between two create functions is only the amount of get_object_vars() calls which leads me to conclusion it's a memory leak. Results are: Create(): Memory usage: 28.72MB CreateWithLeak(): Memory usage: 95.1MB Test script: --------------- abstract class ObjectVarsCache { public static $vars = array(); } class Test { public $a; public $b; public $c; public $d; public $e; public $f; public $g; public $h; public $i; public $j; public function CreateWithLeak() { $vars = get_object_vars($this); } public function Create() { $vars = &ObjectVarsCache::$vars; if (!$vars) $vars = get_object_vars($this); } } $objects = array(); for ($i = 0; $i < 100000; ++$i) { $object = new Test; //$object->Create(); // uncomment to compare $object->CreateWithLeak(); $objects []= $object; } echo "Memory usage: ".round(memory_get_usage() / 1024 / 1024, 2)."MB, Peak memory usage: ".round(memory_get_peak_usage() / 1024 / 1024, 2)."MB";