多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 什么是php 一种通用开源脚本语言, 主要用于web开发领域; 全称: Hypertext Preprocessor 大写PHP和小写php的区别? PHP: 一种编程语言, php:PHP语言的Zend官方实现 # **cow机制**(copy on write): > 当变量传递(除引用变量外)的时候,只有先前原始变量发生write 的时候, 才会重新分配内存给新变量 # **变量容器zval**: ***** xdebug_debug_zval(); # **垃圾回收机制 GC** ***** **什么是垃圾**: 本质是引用计数 php5.3之前判断垃圾的标准是看:是否有变量名指向变量容器zval,也就是说看refcount是否等于0,若没有则认为是垃圾释放掉。 但是会因为环形引用,产生内存泄漏。 所以从php5.3开始的GC中,对垃圾的说明如下, 1.当refcount增加的时候,肯定不是垃圾,不用放到缓冲区中。 2.当refcount减少到0的时候,肯定是垃圾,zval会被立即释放,不是GC处理的垃圾对象不会进入缓冲区 3.当refcount减少之后大于0的时候,可能是垃圾,会进入缓冲区进入处理。 **垃圾回收算法**: 1.对每个跟缓冲区的跟zval进行深度优先遍历,将遍历到的所有的zval的refcount进行减一操作,减一后要对这个zval标注为“已减”(为避免对同一个zval多次减一) 2.再去深度优先遍历所有的zval,查看其refcount是否为0,如果是保持不变,不是的话再给refcount加1 3.将所有的zval从缓冲区中清除,然后销毁所有refcount为0的zval,并收回其内存。 **垃圾回收算法的特性**: 1.可以解决环形引用的问题 2.可以将内存泄漏控制在一定的阀值下 3.并不是每次refcount减少时都会进入回收周期,而是在跟缓冲区满额后再开始垃圾回收的。 参考文档: [https://www.cnblogs.com/chenhaoyu/p/10937715.html](https://www.cnblogs.com/chenhaoyu/p/10937715.html) # **自动加载机制** *****