建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

当前位置: 建站学 > 网站开发 > PHP教程 >

分析PHP5中的垃圾回收机制(3)

时间:2011-03-15 09:54来源: 作者: 点击:
首先是内存泄露试验,下面直接引用PHP Manual中的实验代码和试验结果图: ?php class Foo { public $var = '3.1415962654' ; } $baseMemory =memory_get_usage(); for ( $i =0; $i =100000; $i ++) { $a = new Foo;

首先是内存泄露试验,下面直接引用PHP Manual中的实验代码和试验结果图:

  1. <?php  
  2. class Foo  
  3. {  
  4.     public $var = '3.1415962654';  
  5. }  
  6.  
  7. $baseMemory = memory_get_usage();  
  8.  
  9. for ( $i = 0; $i <= 100000; $i++ )  
  10. {  
  11.     $a = new Foo;  
  12.     $a->self = $a;  
  13.     if ( $i % 500 === 0 )  
  14.     {  
  15.         echo sprintf( '%8d: '$i ), memory_get_usage() - $baseMemory"\n";  
  16.     }  
  17. }  
  18. ?> 

 

PHP

可以看到在可能引发累积性内存泄露的场景下,PHP5.2发生持续累积性内存泄露,而PHP5.3则总能将内存泄露控制在一个阈值以下(与根缓冲区大小有关)。

另外是关于性能方面的对比:

  1. <?php  
  2. class Foo  
  3. {  
  4.     public $var = '3.1415962654';  
  5. }  
  6.  
  7. for ( $i = 0; $i <= 1000000; $i++ )  
  8. {  
  9.     $a = new Foo;  
  10.     $a->self = $a;  
  11. }  
  12.  
  13. echo memory_get_peak_usage(), "\n";  
  14. ?> 

这个脚本执行1000000次循环,使得延迟时间足够进行对比。

然后使用CLI方式分别在打开内存回收和关闭内存回收的的情况下运行此脚本:

  1. time php -dzend.enable_gc=0 -dmemory_limit=-1 -n example2.php  
  2. and 
  3. time php -dzend.enable_gc=1 -dmemory_limit=-1 -n example2.php 

在我的机器环境下,运行时间分别为6.4s和7.2s,可以看到PHP5.3的垃圾回收机制会慢一些,但是影响并不大。

与垃圾回收算法相关的PHP配置

可以通过修改php.ini中的zend.enable_gc来打开或关闭PHP的垃圾回收机制,也可以通过调用gc_enable()或gc_disable()打开或关闭PHP的垃圾回收机制。在PHP5.3中即使关闭了垃圾回收机制,PHP仍然会记录可能根到根缓冲区,只是当根缓冲区满额时,PHP不会自动运行垃圾回收,当然,任何时候您都可以通过手工调用gc_collect_cycles()函数强制执行内存回收。

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片