���ܷ��濼�ǵ�����

����һ�������Ѿ��򵥵��ᵽ�����տ��ܸ���ϸ΢��������Ӱ�죬�����ǰ�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 === )
    {
        echo 
sprintf'%8d: '$i ), memory_get_usage() - $baseMemory"\n";
    }
}
?>
Comparison of memory usage between PHP 5.2 and PHP 5.3

������������Ե������У����Ǵ�����һ��������������е�һ�����Ա�����Ϊָ�ض�������ѭ������һ���ظ�(iteration)�У����ű��еı��������¸���ʱ���ͻᷢ�������Ե��ڴ�й©������������У���������������й©��(������������������)�����ǽ������ҵ�һ�����ܸ������DZ�unset���Ǹ���������10,000���ظ���(Ҳ�Ͳ����ܹ�10,000�����ܸ�)��������������ʱ����ִ���������ջ��ƣ������ͷ���Щ�����Ŀ��ܸ����ڴ档���PHP 5.3�ľ�����ڴ�ռ��ͼ�к����׾��ܿ�����ÿ��ִ����10,000���ظ���ִ���������գ����ͷ���ص��ظ�ʹ�õ����ñ��������������������й©�����ݽṹ�dz��򵥣������������ջ��Ʊ�������̫�๤���������ͼ���У����ܿ��� PHP 5.3������ڴ�ռ�ô����9 Mb����PHP 5.2���ڴ�ռ��һֱ���ӡ�

ִ��ʱ������(Run-Time Slowdowns)

��������Ӱ�����ܵĵڶ������������ͷ���й©���ڴ�ķѵ�ʱ�䡣Ϊ�˿��������ʱʱ���٣�������΢�ı�������Ľű����и���������ظ�����ɾ����ѭ���е��ڴ�ռ�ü��㣬�ڶ����ű��������£�

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�ڲ� GC ͳ����Ϣ

��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Ӧ�ó����µ��������ջ��ƣ�Ӧ�û���ı�һֱ������Ϊ�ڴ�й©�������Խ���Ŀ�����