zoukankan      html  css  js  c++  java
  • 内存缓存机制and垃圾回收机制

    一、内存缓存机制

    var_dump(memory_get_usage(true));
    $a="laruence";
    var_dump(memory_get_usage(true));
    unset($a);
    var_dump(memory_get_usage(true));

    1.加上true之后,显示的三个相等的数代表php申请的内存大小,无论你是空着还是向里面存数据,都显示php申请的内存,当你存储的数据过大时,php会再申请一块新的内存进行扩充,这样就避免了php经常性的调用内存。

    2.所有php内存缓存机制是:php不是每次定义一个数据就申请一次内存,而是预先申请一块内存,当存储数据不够时,再次申请一块内存扩充

    3.

    //$a="hello";
    //1.存储的变量名,存在符号表里。
    //2.变量值存储在内存空间
    //3.在删除变量的时候,会将变量值存储的空间释放,而变量名所在的符号表不会减小

    4.例如:

    var_dump(memory_get_usage());
    for($i=0;$i<100;$i++)
    {
    	$a="test".$i;
    	$$a="hello";
    }
    var_dump(memory_get_usage());
    for($i=0;$i<100;$i++)
    {
    	$a="test".$i;
    	unset($$a);
    }
    var_dump(memory_get_usage());
    

      

    二、垃圾回收机制

    1.

    //php变量存储是存储在一个zval容器里面的
    //zval大体分为四块
    //1.类型 2.变量值 3.is_ref 布尔型代表是否有地址引用 4.refcount 指向该值得变量的个数

    2.例如

    //1.变量赋值的时候:is_ref为false  refcount为1
    $a=1;
    xdebug_debug_zval('a');
    echo PHP_EOL;
    
    //2.将变量a的值赋变量b,变量b不会立刻去在内存中存储值,而是先指向变量a的值,一直到变量a有任何操作的时候
    $b=$a;
    xdebug_debug_zval('a');
    echo PHP_EOL;
    
    //3.因为程序又操作了变量a,所以变量b会自己申请一块内存将值放进去(b不指向a了,但是c又指向a了)
    
    $c=&$a;
    xdebug_debug_zval('a');
    echo PHP_EOL;
    
    xdebug_debug_zval('b');
    echo PHP_EOL;

    3.

    //垃圾回收:
    //1.在5.2版本之前,php会根据refcunt值来判断是不是垃圾
    //如果refcount值为0,php会当做垃圾释放掉
    //这种回收机制有缺陷,对于环装引用的变量无法回收

    //环状引用
    $attr=array("hello");
    $attr[]=&$attr;
    
    xdebug_debug_zval("attr");
    echo PHP_EOL;
    

      

    //2.在5.3之后版本改进了垃圾回收机制
    //如果发现一个zval容器中的refcount在增加,说明不是垃圾
    //如果发现zval容器中的refcount在减少,如果减少到0,直接当做垃圾回收
    //如果发现zval容器中的refcount在减少,并没有减少到0,php会把该值放到缓冲区,当做有可能是垃圾的怀疑对象。
    //当缓冲区达到临界值,php会自动调用一个方法去遍历每一个值,如果发现是垃圾就清理

     

  • 相关阅读:
    iOS把经纬度反转为位置信息(街道名等)
    ubuntu+mongodb
    IE6下绝对定位的高度自适应
    用Waitn控制网页
    PHPCMS 模板修改
    ubuntu+apache2+mono+mvc3
    灵活强大的jquery分页,样式可自定义
    委托与事件概要笔记
    ubuntu+nodejs
    linux 学习day3
  • 原文地址:https://www.cnblogs.com/zst062102/p/5659495.html
Copyright © 2011-2022 走看看