对变量有个引用计数,计数到0时变量被销毁。

————————————————————————

每一种语言都有自己的自动垃圾回收机制,让程序员不必过分关心程序内存分配,但是在OOP中,有些对象需要显式的销毁;防止程序执行内存溢出。

一、PHP 垃圾回收机制(Garbage Collector 简称GC)

在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁;这是PHP 的GC垃圾处理机制,防止内存溢出。

当一个 PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中所有对象同时被销毁。GC进程一般都跟着每起一个SESSION而开始运行的.gc目的是为了在session文件过期以后自动销毁删除这些文件.

二、__destruct /unset

__destruct() 析构函数,是在垃圾对象被回收时执行。

unset 销毁的是指向对象的变量,而不是这个对象。

三、 Session 与 GC

由于PHP的工作机制,它并没有一个daemon线程来定期的扫描Session 信息并判断其是否失效,当一个有效的请求发生时,PHP 会根据全局变量 session.gc_probability 和session.gc_divisor的值,来决定是否启用一个GC, 在默认情况下, session.gc_probability=1, session.gc_divisor =100 也就是说有1%的可能性启动GC(也就是说100个请求中只有一个gc会伴随100个中的某个请求而启动).

GC 的工作就是扫描所有的Session信息,用当前时间减去session最后修改的时间,同session.gc_maxlifetime参数进行比较,如果生存时间超过gc_maxlifetime(默认24分钟) ,就将该session删除。

但是,如果你Web服务器有多个站点,多个站点时,GC处理session可能会出现意想不到的结果,原因就是:GC在工作时,并不会区分不同站点的session.

那么这个时候怎么解决呢?
1. 修改session.save_path,或使用session_save_path() 让每个站点的session保存到一个专用目录,

2. 提供GC的启动率,自然,GC的启动率提高,系统的性能也会相应减低,不推荐。

3. 在代码中判断当前session的生存时间,利用session_destroy()删除.

简单说明PHP的垃圾收集机制是怎样的?相关推荐

  1. 67.Java垃圾收集机制\对象引用\垃圾对象的判定\垃圾收集算法\标记—清除算法\标记—整理算法\分代收集\垃圾收集器\性能调优

    67.Java垃圾收集机制 67.1.对象引用 67.2.垃圾对象的判定 67.3.垃圾收集算法 67.3.1.标记-清除算法 67.3.2.标记-整理算法 67.3.3.分代收集 67.4.垃圾收集 ...

  2. 老郭的《Dalvik虚拟机垃圾收集机制简要介绍和学习计划》

    伴随着"Dalvik is dead,long live Dalvik"这行AOSP代码提交日志,在Android5.0中,ART运行时取代了Dalvik虚拟机.虽然Dalvik虚 ...

  3. Java垃圾收集机制

    本文是<深入理解Java虚拟机>一书中第三章的读书总结. 前面介绍了Java内存结构和HotSpot虚拟机在堆内存中管理对象的过程.不过,在Java程序中对象的创建是非常频繁的,而内存的大 ...

  4. JAVA垃圾收集机制剖析

    1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象.该机制能够有效防范动态内存分配中可能发生的两个危急:因内存垃圾过多而引发的内存耗尽 ...

  5. 【JVM】第三章 垃圾收集机制

    第三章 垃圾收集机制 文章目录 第三章 垃圾收集机制 一.垃圾标记算法 1.引用计数算法 2.根可达性分析算法 二.垃圾收集算法 1.标记 - 清除算法 2.复制算法 3.标记 - 压缩算法 4.对比 ...

  6. 一起来探讨Javascript垃圾收集机制

    JS垃圾收集机制 JS会在创建变量时自动分配内存,在不使用的时候会自动周期性的释放内存,释放的过程就叫 "垃圾回收".这个机制有好的一面,当然也也有不好的一面.一方面自动分配内存减 ...

  7. javascript V8引擎垃圾收集机制

    V8引擎使用的垃圾收集机制是标记清除,那么javascript在垃圾收集会阻塞其他程序执行.V8引擎使用了增量标记的方式进行优化 增量标记 V8不是直接对整个栈堆遍历标记,而是标记一部分堆后回复正常执 ...

  8. .Net Discovery 系列之三--深入理解.Net垃圾收集机制(上)

    前言: 组成.Net平台一个很重要的部分----垃圾收集器(Garbage Collection),今天我们就来讲讲它.想想看没有GC,.Net还能称之为一个平台吗?各种语言虽然都被编译成MSIL,但 ...

  9. .Net Discovery系列之三 深入理解.Net垃圾收集机制(上)

    前言: 组成.Net平台一个很重要的部分----垃圾收集器(Garbage Collection),今天我们就来讲讲它.想想看没有GC,.Net还能称之为一个平台吗?各种语言虽然都被编译成MSIL,但 ...

最新文章

  1. html中embed标签的用法
  2. unity 开发总结
  3. 时空图卷积神经网络(st-gcn)论文解读
  4. c语言有趣的编程代码,一个有趣的小程序
  5. 把一个SVN项目的目录结构 导入到另外一个空白的SVN项目里
  6. 无法实现的梦想:孤独之旅计划
  7. 飞天云动能否一飞冲天?
  8. html钢笔特效,JS仿Photoshop钢笔工具(贝塞尔曲线可视化操作)效果
  9. FMI飞马网 | 【线上直播】如何处理好横向关系 在协同与合作中实现双赢(下)
  10. Problem A. Snapper Chain 问题A.按扣链条 解决办法
  11. 机器视觉——远心镜头(1)
  12. [flink]各种大厂开源案例
  13. js,jquery获取复选框checkbox被选中的值
  14. Azure text-to-speech 语音合成 中文晓晓情感API使用及教程
  15. js 当前时间减6个月
  16. 12306_qiang票子(爬虫小练_2)
  17. 法语初级学习笔记-04-单词
  18. 关于机房环境监控温湿度检测!
  19. html页面怎么加锚点,html页面添加锚点
  20. 可擦写光盘不能擦除和刻写_光盘的分类,光盘的擦除与刻录。

热门文章

  1. final,finally,finaliz的区别(Java)
  2. SQL基础【二、SQL语法】
  3. ASP.NET MVC上传图片前后台内容
  4. MongoDB管理:慎用local、admin数据库
  5. 遭遇11gR2 bug:kewastUnPackStats(): bad magic 1
  6. Hive安装MySql
  7. selenium+java的常使用的一些操作
  8. 【Vegas原创】终端服务器超出了最大允许连接数 解决方法
  9. 二值图像连通 C语言,二值图像统计连通区域C语言版
  10. linux设备和驱动注册,Linux驱动第五篇-----驱动注册和生成设备节点