旗下导航:搜·么
当前位置:网站首页 > PHP问题 > 正文

什么是PHP内存管理机制与垃圾接纳机制?该怎样明白?【php题目】

作者:搜搜PHP网发布时间:2019-11-26分类:PHP问题浏览:77


导读:PHP内存管理机制var_dump(memory_get_usage());//猎取内存$a="laruence";//定义一个...
PHP内存管理机制

var_dump(memory_get_usage());   //猎取内存
$a = "laruence";                //定义一个变量
var_dump(memory_get_usage());   //定义变量以后猎取内存
unset($a);                      //删除该变量
var_dump(memory_get_usage());   //删除变量后猎取内存

输出效果:

int 262144
int 262144
int 262144

从上面能够看出php的内存管理机制是:预先给出一块空间,用来存储变量,当空间不够时,再请求一块新的空间。

1.存储变量名,存在符号表。

2.变量值存储在内存空间。

3.在删除变量的时刻,会将变量值存储的空间开释,而变量名地点的符号表不会减小。

var_dump(memory_get_usage());  //猎取内存
//定义100个变量
for($i=0;$i<100;$i++)
{
    $a = "test".$i;
    $$a = "hello";
}
//猎取定义100个变量以后的内存
var_dump(memory_get_usage());
//定义100个变量并删除
for($i=0;$i<100;$i++)
{
    $a = "test".$i;
    unset($$a);
}
//猎取删除以后的内存
var_dump(memory_get_usage());

输出效果:

int 240040
int 257680
int 240856

从上面能够看出,虽然删除后内存变小了,但照样比没定义变量之前时大,这是由于虽然删除了变量的值,但变量名没有被删除。

php垃圾接纳机制

PHP变量存储是存储在一个zval容器内里的

1.范例 2.值 3.is_ref 代表是不是有地点援用 4.refcount 指向该值的变量数目

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会本身请求一块内存将值放进去。所以变量a的zavl容器中refcount会减1变成1,变量c指向a,所以refcount会加1变成2

$c = &$a;
xdebug_debug_zval('a');echo PHP_EOL;
xdebug_debug_zval('b');echo PHP_EOL;

垃圾接纳:

1.在5.2版本或之前版本,PHP会依据refcount值来推断是不是是垃圾

假如refcount值为0,PHP会当作垃圾开释掉

这类接纳机制有缺点,关于环状援用的变量没法接纳

2.在5.3以后版本改进了垃圾接纳机制

假如发明一个zval容器中的refcount在增添,申明不是垃圾

假如发明一个zval容器中的refcount在削减,假如减到了0,直接当作垃圾接纳

假如发明一个zval容器中的refcount在削减,并没有减到0,PHP会把该值放到缓冲区,当作有多是垃圾的疑心对象。

当缓冲区达到了临界值,PHP会自动挪用一个要领去遍历每个值,假如发明是垃圾就清算

更多相干题目请接见ki4网:PHP实战视频教程

以上就是什么是PHP内存管理机制与垃圾接纳机制?该怎样明白?的细致内容,更多请关注ki4网别的相干文章!

标签:内存管理