PHP的GC机制
admin
2023-01-28 17:01:26
0

就是垃圾回收器,全称Garbage Collection。

  1. php中垃圾是如何定义的?
    准确地说,判断是否为垃圾,主要看有没有变量名指向变量容器zval,如果没有则认为是垃圾,需要释放。

  2. 5.3版本以后php是如何处理垃圾内存的?
    判断处理过程
    .如果一个zval的refcount增加,那么此zval还在使用,不属于垃圾
    .如果一个zval的refcount减少到0, 那么zval可以被释放掉,不属于垃圾
    .如果一个zval的refcount减少之后大于0,那么此zval还不能被释放,此zval可能成为一个垃圾
    就是对此zval中的每个元素进行一次refcount减1操作,操作完成之后,如果zval的refcount=0,那么这个zval就是一个垃圾

  3. 对于一个包含环形引用的数组,对数组中包含的每个元素的zval进行减1操作,之后如果发现数组自身的zval的refcount变成了0,那么可以判断这个数组是一个垃圾

  4. 优化配置:会有一个缓冲区的概念,等缓冲区满了才会一次性去给清掉。缓冲区默认可以放10,000个节点,当缓冲区满了才会清理。

  5. php.ini中设置 zend.enable_gc 项来开启或则关闭GC。gc_enable() : 开启GC gc_disable() : 关闭GC
    gc_collect_cycles() : 在节点缓冲区未满的情况下强制执行垃圾分析算法

  6. 涉及到垃圾回收的知识点
    .unset只是断开一个变量到一块内存区域的连接,同时将该内存区域的引用计数-1;内存是否回收主要还是看refount是否到0了,以及gc算法判断
    .a=null是直接将a 指向的数据结构置空,同时将其引用计数归0
    .脚本执行结束,该脚本中使用的所有内存都会被释放,不论是否有引用环

相关内容

热门资讯

美军被疑隐瞒对伊作战伤亡 【环球时报综合报道】美国国防部21日发表声明说,一名美军士兵17日在伊朗针对位于约旦的穆沃费格萨勒提...
OpenAI模型“越狱”攻击,... 一家美国公司遭到美国AI攻击,而提供保护的竟是一款中国人工智能工具。AI工具平台Hugging Fa...
南航第十二架C919国产大飞机... 广州7月21日电 (记者 郭军)7月21日,一架尾号为B-659G的国产大飞机飞抵广州白云国际机场,...
无人艇第一股,要来了 那个被资本追捧的“无人艇第一股”,要来了。 2017年冬天的一个夜晚,港珠澳大桥附近的海面上,81条...
三一锂能取得电池包专利提升电芯... 国家知识产权局信息显示,三一锂能有限公司取得一项名为“电池包”的专利,授权公告号CN22453717...
价格为何下滑?市场竞争力为何不... 记者采访西瓜种植主产区河南开封等地如何种得好,又能卖得好(经济聚焦)本报记者 常 钦 《人民日报》(...
“镐山”之后美再威胁袭伊基础设... 截至7月22日,美军已连续11晚对伊朗发动袭击,伊方对美中东地区军事基地的反击也未停止。与此同时,美...
美国“痛失”杨植麟,这是历史性... 杨植麟的月之暗面创造了Kimi K3,轰动整个世界。他是近年来第一个放弃了美国机会、回中国创业,并且...
铭显光电取得LED显示屏加工夹... 国家知识产权局信息显示,上海铭显光电科技有限公司取得一项名为“一种LED显示屏加工夹具”的专利,授权...
大盘承压依旧登顶,vivo拿下... 7月22日消息,市场调研机构Omdia发布2026年第二季度印度智能市场报告,数据显示本季度印度手机...