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...