美文网首页
php垃圾回收和内存管理机制

php垃圾回收和内存管理机制

作者: Yumazhiyao | 来源:发表于2017-11-27 13:55 被阅读95次

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

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

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

二、__destruct /unset

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

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

三、 Session 与PHP垃圾回收机制

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

PHP垃圾回收机制的工作就是扫描所有的Session信息,用当前时间减去session最后修改的时间,同session.gc_maxlifetime参数进行比较,如果生存时间超过gc_maxlifetime(默认24分钟),就将该session删除。
但是,如果你Web服务器有多个站点,多个站点时,GC处理session可能会出现意想不到的结果,原因就是:GC在工作时,并不会区分不同站点的session.

那么这个时候怎么解决呢?

  1. 修改session.save_path,或使用session_save_path()让每个站点的session保存到一个专用目录,

  2. 提供GC的启动率,自然,PHP垃圾回收机制的启动率提高,系统的性能也会相应减低,不推荐。

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

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分是 zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等.
Zend Memory Manager, 以下简称Zend MM, 是PHP中内存管理的逻辑. 其中有一个关键数据结构: zend_mm_heap

Zend MM把内存分为小块内存和大块内存俩种, 区别对待, 对于小块内存, 这部分是最最常用的, 所以追求高性能. 而对于大块内存, 则追求的是稳妥, 尽量避免内存浪费.

所以, 对于小块内存, PHP还引入了cache机制,Zend MM 希望通过cache尽量做到, 一次定位就能查找分配.

相关文章

  • Java内存管理机制 ————浅析原理

    java内存管理机制 内存泄漏 内存溢出 内存抖动: 话术整理 首先java的内存管理机制 gc的垃圾回收...

  • php垃圾回收和内存管理机制

    一、PHP 垃圾回收机制(Garbage Collector 简称GC) 在PHP中,没有任何变量指向这个对象时,...

  • 高级PHP面试题

    # PHP 篇 ## GC PHP 5 的内存回收原理?请详细描述ZendMM的工作原理 PHP 7 的垃圾回收和...

  • python内存管理机制

    Python内存管理机制 Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 ...

  • Python基础入门 - 内存管理与多线程

    1. 内存管理机制 1.1 介绍 概要赋值语句内存分析垃圾回收机制内存管理机制 目标掌握赋值语句内存分析方法掌握i...

  • 如何避免内存溢出和频繁的垃圾回收

    如何避免内存溢出和频繁的垃圾回收 内存管理机制的实现原理,就不细谈了,内存的回收过程很复杂,简单的说就是两个步骤:...

  • IOS内存管理

    内存概述 内存是用来存啥的? 内存布局 哈希表 垃圾回收(GC) IOS内存管理机制 MRC & ARC T...

  • JVM学习笔记(3)-垃圾收集算法

    JVM学习笔记(1)-内存管理机制 JVM学习笔记(2)-内存分配与回收 垃圾收集算法 JVM垃圾收集算法有四种:...

  • 深入理解GC 回收机制与分代回收策略

    垃圾回收(Garbage Collection,GC) 指的是JVM的自动内存管理机制,即:当堆内存中分配的对象所...

  • 2018-09-26

    笔试要点: ①JVM内存管理机制和垃圾回收机制 ②JVM内存调优 ③ 设计模式(熟悉常见设计模式的应用场景,会画类...

网友评论

      本文标题:php垃圾回收和内存管理机制

      本文链接:https://www.haomeiwen.com/subject/mpxdbxtx.html