����һ�������Ѿ����ᵽ�����տ��ܸ���ϸ��������Ӱ�죬�����ǰ�PHP 5.2��PHP 5.3�Ƚ�ʱ���еġ�������PHP 5.2�У���¼���ܸ��������ȫ����¼���ܸ�Ҫ��Щ����PHP 5.3�ж� PHP run-time �������ļ��������������ʧ��
������Ҫ�����������������Ӱ�졣��һ�����ڴ�ռ�ÿռ�Ľ�ʡ����һ�����������ջ���ִ���ڴ�����ʱ��ִ��ʱ������(run-time delay)�����ǽ��о�����������
���ȣ�ʵ���������ջ��Ƶ�����ԭ����Ϊ�ˣ�һ���Ⱦ��������㣬ͨ������ѭ�����õı�������ʡ�ڴ�ռ�á���PHPִ���У�һ�������������˻��ߵ���gc_collect_cycles() ����ʱ���ͻ�ִ���������ա�����ͼ�У���ʾ������ű��ֱ���PHP 5.2 �� PHP 5.3�����µ��ڴ�ռ������������ų��˽ű�����ʱPHP����ռ�õĻ����ڴ档
Example #1 Memory usage example
<?php
class Foo
{
public $var = '3.1415962654';
}
$baseMemory = memory_get_usage();
for ( $i = 0; $i <= 100000; $i++ )
{
$a = new Foo;
$a->self = $a;
if ( $i % 500 === 0 )
{
echo sprintf( '%8d: ', $i ), memory_get_usage() - $baseMemory, "\n";
}
}
?>
������������Ե������У����Ǵ�����һ��������������е�һ�����Ա�����Ϊָ�ض�������ѭ������һ���ظ�(iteration)�У����ű��еı��������¸���ʱ���ͻᷢ�������Ե��ڴ�й©������������У���������������й©��(������������������)�����ǽ������ҵ�һ�����ܸ������DZ�unset���Ǹ���������10,000���ظ���(Ҳ�Ͳ����ܹ�10,000�����ܸ�)��������������ʱ����ִ���������ջ��ƣ������ͷ���Щ�����Ŀ��ܸ����ڴ档���PHP 5.3�ľ�����ڴ�ռ��ͼ�к������ܿ�����ÿ��ִ����10,000���ظ���ִ���������գ����ͷ���ص��ظ�ʹ�õ����ñ��������������������й©�����ݽṹ�dz��������������ջ��Ʊ�������̫����������ͼ���У����ܿ��� PHP 5.3������ڴ�ռ�ô����9 Mb����PHP 5.2���ڴ�ռ��һֱ���ӡ�
��������Ӱ�����ܵĵڶ������������ͷ���й©���ڴ�ķѵ�ʱ�䡣Ϊ�˿��������ʱʱ���٣��������ı�������Ľű����и���������ظ�����ɾ����ѭ���е��ڴ�ռ�ü��㣬�ڶ����ű��������£�
Example #2 GC����Ӱ��
<?php
class Foo
{
public $var = '3.1415962654';
}
for ( $i = 0; $i <= 1000000; $i++ )
{
$a = new Foo;
$a->self = $a;
}
echo memory_get_peak_usage(), "\n";
?>
���ǽ���������ű����Σ�һ��ͨ������zend.enable_gc ���������ջ���ʱ����һ�������ر�ʱ��
Example #3 ִ�����Ͻű�
time php -dzend.enable_gc=0 -dmemory_limit=-1 -n example2.php # and time php -dzend.enable_gc=1 -dmemory_limit=-1 -n example2.php
���ҵĻ����ϣ���һ���������ִ��ʱ����Ϊ10.7�룬���ڶ�������ķ�11.4�롣ʱ����������7%��Ȼ����ִ������ű�ʱ�ڴ�ռ�õķ�ֵ������98%����931Mb ���� 10Mb����������Ǻܿ�ѧ�����߲����ܴ�����ʵӦ�ó�������ݣ���������ȷ��ʾ���������ջ������ڴ�ռ�÷���ĺô�������Ϣ���ǣ�������ű����ԣ���ִ���г��ָ����ѭ�����ñ���ʱ���ڴ��ʡ�ĸ��������£�ÿ��ʱ�����ӵİٷֱȶ���7%��
��PHP�ڲ���������ʾ����Ĺ����������ջ���������е���Ϣ������Ҫ��ʾ��Щ��Ϣ������Ҫ�����±���PHPʹbenchmark��data-collecting code���á�����Ҫ�ڰ��������Ը����./configureǰ���ѻ�������CFLAGS���ó�-DGC_BENCH=1��������������������£�
Example #4 ���±���PHP������GC benchmarking
export CFLAGS=-DGC_BENCH=1 ./config.nice make clean make
�������±����PHP�������ļ�������ִ����������Ӵ��룬��PHPִ�н������㽫�����������Ϣ��
Example #5 GC ͳ������
GC Statistics ------------- Runs: 110 Collected: 2072204 Root buffer length: 0 Root buffer peak: 10000 Possible Remove from Marked Root Buffered buffer grey -------- -------- ----------- ------ ZVAL 7175487 1491291 1241690 3611871 ZOBJ 28506264 1527980 677581 1025731
��Ҫ����Ϣͳ���ڵ�һ���顣���ܿ����������ջ���������110�Σ���������110�������У��ܹ��г�����������ڴ���䱻�ͷš�ֻҪ�������ջ�������������һ�Σ�����������ֵ(Root buffer peak)����10000.
ͨ����PHP�е��������ջ��ƣ�������ѭ�������㷨ȷʵ����ʱ����ʱ�������ϵ����ӡ�������ƽ����(��С��)�ű���Ӧ������û������Ӱ�졣
Ȼ������ƽ���ű�����ѭ�����ջ������е�����£��ڴ�Ľ�ʡ������������ֽű�ͬʱ��������ķ������ϡ���Ϊ�ܹ�ʹ�õ��ڴ�û�ﵽ���ޡ�
���ֺô��ڳ�ʱ�����нű����������ԣ����糤ʱ��IJ���������daemon�ű����ࡣͬʱ����ͨ����Web�ű�����ʱ�䳤��» PHP-GTKӦ�ó����µ��������ջ��ƣ�Ӧ�û���ı�һֱ������Ϊ�ڴ�й©�������Խ���Ŀ�����