Bug #79392 [Opn]: get_object_vars() memory leak

From: Date: Wed, 18 Mar 2020 12:05:56 +0000
Subject: Bug #79392 [Opn]: get_object_vars() memory leak
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-226149@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79392&edit=1 ID: 79392 User updated by: tomas914 at gmail dot com Reported by: tomas914 at gmail dot com Summary: get_object_vars() memory leak Status: Open Type: Bug Package: Performance problem Operating System: Windows 10 PHP Version: Irrelevant Block user comment: N Private report: N New Comment: Issue is present in all PHP versions since at least 7.0, didn't test earlier ones. Previous Comments: ------------------------------------------------------------------------ [2020-03-18 12:01:03] tomas914 at gmail dot com 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"; ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=79392&edit=1

« previous php.bugs (#226149) next »