php线程的内存回收问题

php线程的内存回收问题

ID:27978692

大小:50.50 KB

页数:6页

时间:2018-12-07

php线程的内存回收问题_第1页
php线程的内存回收问题_第2页
php线程的内存回收问题_第3页
php线程的内存回收问题_第4页
php线程的内存回收问题_第5页
资源描述:

《php线程的内存回收问题》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、PHP线程的内存回收问题当一个PHP线程结束时,当前占用的所有内存空间都会被销毁。那么如果这个线程不结束,怎么回收内存呢?refcount:引用技术器,可以理解为指向该个容器的指针个数吧。is_ref:是否被引用(只可能是0或者1)赋值的流程:It:?phpSa=,aa?:xdebug_debug_zval(a);//(refcount=l,is_ref=0),string’aa’(length=6)$b=$a;//以下的两个其实是一个变量容器xdebug_debug_zva1(a)://(refcount=2,is_ref=0),string’aa’(l

2、ength=6)xdebug_debug_zval(b);//(refcount=2,is_ref=0),string’aa’(length=6)unset($b)://对变量容器refcount减1xdebug_debug_zval(a);//(refcount=l,is_ref=0),string’aa’(length=6)xdebug_debug_zval(b)://b:nosuchsymbolb变量被销毁,指向被断掉,如果对应容器的引用技术为零,那么该块儿内存被回收$b=$a;$b=’bb’;xdebug_debug_zval(a)://(refc

3、ount=l,is_ref=O),string’aa’(length=6)xdebug_debug_zval(b);//(refcount=l,is_ref=O),string’aa’(length=6)重新申请一个变量容器存储b,a的变量容器引用减1引用的流程:It;?phpxdebug_debug_zval(’a’);//(refcount=1,is_ref=0),string’aa’(length=2)$b=amp;$a;//变量容器的引用技术加1,引用标记置为1xdebugdebug_zval(’a’);//(refcount=2,is_ref=l

4、),string’aa’(length=2)xdebug_debug_zval(’b’);//(refcount=2,is_ref=l),string’aa’(length=2)$b=123J://php会发现,该容器变量是引用(is.ref),所以容器变量不用像赋值那样再申请一个xdebug_debug_zval(’a’)://(refcount=2,is_ref=l),string’123’(length=2)xdebugdebug_zval(’b’);//(refcount=2,is_ref=1),string’123’(length=2)unset

5、($b)://变量容器应用计数减1,引用为零xdebug_debug_zval(’a’);//(refcount=1,is_ref=0),string’123’(length=2)xdebugdebug_zval(’b’);//b:nosuchsymbol那如果多次引用,unset掉一个,is_ref是否会被置为零,那样bug不就出现了么?变量容器还是引用啊。那么我们来看看:It;?php$a=’aa’;$b=amp;$a;$c=amp;$a;//可以看到引用refCount是3,is_ref永远是1xdebug_debug_zval(’a’)://(re

6、fcount=3,is_ref=l),string’aa’(length=2)xdebug_debug_zval(’b’);//(refcount=3,is_ref=1),string’aa’(length=2)xdebugdebug_zval(’c’);//(refcount=3,is_ref=l),string’aa’(length=2)unset($b);//我们期待的bug没有出现,只是refcount减1,is_ref还是1xdebug_debug_zval(’a’);//(refcount=2,is_ref=1),string’aa’(leng

7、th=2)xdebug_debug_zval(’b’)://b:nosuchsymbolxdebugdebug_zval(’c’);//(refcount=2,is_ref=1),string’aa’(length=2)//那php它怎么知道这个容器还有引用,毕竟is_ref仍然是1,不能计数,那么现在refcount就起作用了,是它告诉php,该变量有几个引用,但问题又来了,如果我干点坏事,在引用的时候,又赋值,它会不会有bug$e=$a;//我们看到期望的bug还是没出现,这时候再赋值,就不像直接赋值那么简单refcount加1了,而是申请了一个新的变

8、量容器xdebug_debug_zval(’a’)://(refc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。