共计 985 个字符,预计需要花费 3 分钟才能阅读完成。
php 为单进程的, 由 apache 代执行, 每一个请求, 由 apache 从进程池中取出进程, 初始化数据结构, 创建进程.
变量共享, 类似于 session 的内容, 为所有进程所共享, 即单例模式. 默认是采用磁盘文件实现 session 的管理
即 static 变量, 是一次请求说单独的享有的, 不能被所有请求所共享.
session 共享
由于每次请求代由 apache 创建进程, 所以由 session 共享问题,php 是使用文件的机制达到 session 共享.
内存管理
和 C 语言一样, 同样具有相关的函数
https://www.php.net/manual/zh…
php 生命周期
这里一张图概述
Zend 虚拟机
php 的引擎为 Zend 虚拟机
其中 Zend 虚拟机和 js 虚拟机类似, 感觉一个内容
运行流程
Zend 和 php 关系
Zend Technologies 公司来管理 PHP 的开发
内存泄漏
由于 php 属于高级语言, 自动管理内存, 但是依旧会有内存泄漏的问题.
使用 valgrind 进行内存泄漏的分析
php 内存管理
分为三层 存储层(storage)、堆层(heap)和接口层(emalloc/efree)
一张图
php 是使用链来管理的.
一张图
定义一个数组指针, 每次通过数组指针指向所请求的内存空间
在单个请求初始化的时候, 内核会初始化 free_buckets 列表, 其是一个数组指针, 通过存储的是双向链表的头尾指针, 用来达到对内存的管理
关于 js 的内存
js 的内存的使用原型链的方式, 有一个总的 windows 节点, 每次创建的时候, 会挂载到 windows 节点上
关于 java 内存
之前说明的全是动态语言的内存机制, 现在说明静态语言, 以 java 为例, 每次写好 java 文件以后, 编译生成 class 文件,class 文件即定义了内存的结构, 使用装载命令, 装载进入内存, 即内存结构被固定化. 在运行的期间, 当使用 new 命令, 将会根据 class 文件定义的内存模型, 在 jvm 的虚拟机中的创建出一样的对象, 并进行指向, 运算的时候, 本质通过栈进行运算.
通过这种方式, 静态语言模拟动态语言.
关于动静态语言
静态语言定义好的内存结构, 进行运算即可
动态语言, 和原型链类型, 进行加载上去即可.
垃圾回收
之前 php 只是简单的引用计数法进行垃圾回收.
不想看了 http://docs.php.net/manual/zh…
https://researcher.watson.ibm…