Bug #60983 [Com]: Memory is not properly freed

From: Date: Mon, 06 Feb 2012 17:16:29 +0000
Subject: Bug #60983 [Com]: Memory is not properly freed
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-167219@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=60983&edit=1

 ID:                 60983
 Comment by:         DeveloperGuy2008 at yahoo dot com
 Reported by:        developerguy2008 at yahoo dot com
 Summary:            Memory is not properly freed
 Status:             Not a bug
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   all
 PHP Version:        5.4.0RC7
 Block user comment: N
 Private report:     N

 New Comment:

Do you know any references where I may read about the object_store? Is there a to shrink it (like a
compile time flag) when it is does not need to be large?

It seems like the ideal result would be to shrink the object store. In this example it is only a few
megabytes but in other cases it could be several hundred megabytes that essentially lost forever (at
least to other processes).


Previous Comments:
------------------------------------------------------------------------
[2012-02-06 07:46:59] laruence@php.net

the reason for there is mem diff is that, the EG(objects_store) could only be 
grow  but could not be shrunk. 

if you tweak your test into:
$mem1 = memory_get_usage(true);
echo "MEM1: " . $mem1 . "\n";
class A {
	public $class;
}

$c1 = $c2 = null;
for ($i = 0; $i < 20000; $i++) {
	$c1 = new A();
	$c2 = new A();
	$c1->class = array($c1, $c2);
	$c2->class = array($c1, $c2);
       
        gc_collect_cycles();

}
unset($c1); unset($c2);

$mem2 = memory_get_usage(true);
echo "MEM2: " . $mem2 . "\n";
echo "DIFF: " . ($mem2 - $mem1) . "\n";

you may understand my point

------------------------------------------------------------------------
[2012-02-06 00:43:46] developerguy2008 at yahoo dot com

Description:
------------
Memory is not being freed properly. In a short loop several megabytes are lost that should not be
lost. Attached is a test script to demonstrate what I mean.

Test script:
---------------
$mem1 = memory_get_usage(true);
echo "MEM1: " . $mem1 . "\n";
class A {
	public $class;
}

$c1 = $c2 = null;
for ($i = 0; $i < 20000; $i++) {
	$c1 = new A();
	$c2 = new A();
	$c1->class = array($c1, $c2);
	$c2->class = array($c1, $c2);
}
unset($c1); unset($c2);

gc_collect_cycles();
$mem2 = memory_get_usage(true);
echo "MEM2: " . $mem2 . "\n";
echo "DIFF: " . ($mem2 - $mem1) . "\n";

Expected result:
----------------
I expect the memory difference to be 0. In this case it is several megabytes.

Actual result:
--------------
MEM1: 4980736
MEM2: 7340032
DIFF: 2359296

The DIFF should be 0.


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=60983&edit=1


Thread (3 messages)

« previous php.bugs (#167219) next »