ID: 46790 Comment by: o_O_Tync at mail dot ru Reported By: o_O_Tync at mail dot ru Status: Feedback Bug Type: Class/Object related Operating System: Win, FreeBSD PHP Version: 5.2.7 New Comment:
>php.exe -v PHP 5.3.0alpha4-dev (cli) (built: Dec 6 2008 17:07:05) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2008 Zend Technologies Without the 'this helps' line >php.exe -f memleak.php Mem: 1166 Kb With the 'this helps' line >php.exe -f memleak.php Mem: 321 Kb The problem remains Previous Comments: ------------------------------------------------------------------------ [2008-12-07 07:13:01] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5.3-latest.tar.gz For Windows: http://windows.php.net/snapshots/ ------------------------------------------------------------------------ [2008-12-07 06:34:02] o_O_Tync at mail dot ru Description: ------------ I've come across a memory leak: garbage collector failes to free memory occupied by linked objects, such as: $obj1->pair = $obj2; $obj2->pair = $obj1; Below goes the problematic piece of code: over many iterations - it occupies a lot of memory. If we comment 'line1' or 'line2' or both - memory is okay (48 Kb), but cross-linking reveals a bug (839 Kb) despite of explicit unsetting. The commented 'this helps' line solves the problem. Tested under WinXP, and FreeBSD 6.1 using the latest PHP 5.2.7 Reproduce code: --------------- <?php class Paired { /** Paired object * @var Paired */ public $pair; } for ($i=0;$i<2000;$i++) { $obj1 = new Paired; $obj2 = new Paired; $obj1->pair = $obj2; // 'line1' $obj2->pair = $obj1; // 'line2' // $obj1->pair = null; $obj2->pair = null; // this helps unset($obj1); unset($obj2); // Explicitly } print 'Mem: '.floor(memory_get_usage()/1024).' Kb'; ?> Expected result: ---------------- Mem: 48 Kb Actual result: -------------- Mem: 839 Kb ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=46790&edit=1