亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

淺談PHP源碼三十三:PHP5.3新增加的垃圾回收機制(Garbage Collection)基礎

2020-03-22 17:36:59
字體:
來源:轉載
供稿:網友
首頁 > html' target='_blank'>php教程 > php教程 > 正文 淺談PHP源碼三十三:PHP5.3新增加的垃圾回收機制(Garbage Collection)基礎 2018-06-29 10:00:34 第六期線上培訓班
這篇文章主要介紹了關于淺談PHP源碼三十三:PHP5.3新增加的垃圾回收機制(Garbage Collection)基礎,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

淺談PHP源碼三十三:PHP5.3新增加的垃圾回收機制(Garbage Collection)基礎
PHP5.3中新增加了垃圾回收機制,據說很先進,據說引誘了我去看看其先進的實現。
官方說明文檔請猛擊Garbage Collection
中文版地址:http://docs.php.net/manual/zh/features.gc.php
【垃圾回收機制的嵌入方式】
zend_gc.h文件在zend.h的749行被引用:#include “zend_gc.h”
從而替換覆蓋了在237行引用的zend_alloc.h文件中的ALLOC_ZVAL等宏
zend/zend_gc.h文件的202行開始

 /* The following macroses override macroses from zend_alloc.h */#undef ALLOC_ZVAL#define ALLOC_ZVAL(z) /do {/(z) = (zval*)emalloc(sizeof(zval_gc_info));/GC_ZVAL_INIT(z);/} while (0)

ALLOC_ZVAL宏在zend_alloc.h中的定義是分配一個zval結構的內存空間。新的ALLOC_ZVAL宏分配了一個zval_gc_info結構的宏。zval_gc_info的結構如下:
zend/zend_gc.h文件的91行開始:

 typedef struct _zval_gc_info {zval z;union {gc_root_buffer *buffered;struct _zval_gc_info *next;} u;} zval_gc_info;

zval_gc_info的第一個成員為zval結構,這就確保其和以zval變量分配的內存的開始對齊,從而在zval_gc_info類型指針的強制轉換時,其可以作為zval使用。關于gc_root_buffer等將在后面的結構和實現時介紹,它定義的PHP垃圾回收機制的緩存結構。GC_ZVAL_INIT用來初始化替代了zval的zval_gc_info,它會把zval_gc_info中的成員u的buffered字段設置成NULL,此字段僅在將其放入垃圾回收緩沖區時才會有值,否則會一直是NULL。

由于PHP中所有的變量都是以zval變量的形式存在,這里以zval_gc_info替換zval,從而成功實現垃圾收集機制在原有系統中的集成。
這個有點面向對象中多態的感覺。

【垃圾回收機制的存儲方式】
結點結構:

 typedef struct _gc_root_buffer {struct _gc_root_buffer *prev;/* double-linked list */struct _gc_root_buffer *next;zend_object_handle handle;/* must be 0 for zval */union {zval *pz;zend_object_handlers *handlers;} u;} gc_root_buffer;

很明顯(見注釋,雖然PHP中的注釋很少,但是有些純粹是糾結的注釋),這是一個雙向鏈表。

在聯合體中的pz變量很明顯就是之前定義的多態的zval_gc_info結構,于是其在鏈表中的當前結點指針可以通過((zval_gc_info*)(pz))- u.buffered獲取,不過在看其源碼中有多處使用到這個調用方式,為何不另起一個宏呢?難道是怕宏太多,不是啊,PHP就是以宏多著稱,比這個宏嵌套多的宏海了去了。不懂。另外handle等結構是特別針對對象變量的。

緩沖區是話在全局變量中的,和其它模塊的全局變量一樣,gc也有其自己的全局變量訪問宏 GC_G(v),同樣對于全局變量訪問宏在是否ZTS下有不同的實現。
在zend_gc.h中定義的全局變量如下:

typedef struct _zend_gc_globals {zend_bool gc_enabled;/* 是否開啟垃圾收集機制 */zend_bool gc_active;/* 是否正在進行 */ gc_root_buffer *buf;/* 預分配的緩沖區數組,默認為10000(preallocated arrays of buffers) */gc_root_buffer roots;/* 列表的根結點(list of possible roots of cycles) */gc_root_buffer *unused;/* 沒有使用過的緩沖區列表(list of unused buffers) */gc_root_buffer *first_unused;/* 指向第一個沒有使用過的緩沖區結點(pointer to first unused buffer) */gc_root_buffer *last_unused;/* 指向最后一個沒有使用過的緩沖區結點,此處為標記結束用(pointer to last unused buffer) */ zval_gc_info *zval_to_free;/* 將要釋放的zval變量的臨時列表(temporaryt list of zvals to free) */zval_gc_info *free_list;/* 臨時變量,需要釋放的列表開頭 */zval_gc_info *next_to_free;/* 臨時變量,下一個將要釋放的變量位置*/ zend_uint gc_runs;/* gc運行的次數統計 */zend_uint collected; /* gc中垃圾的個數 */ // 省略...

【垃圾回收機制中的顏色標記】

 #define GC_COLOR 0x03 #define GC_BLACK 0x00#define GC_WHITE 0x01#define GC_GREY 0x02#define GC_PURPLE 0x03 #define GC_ADDRESS(v) /((gc_root_buffer*)(((zend_uintptr_t)(v)) ~GC_COLOR))#define GC_SET_ADDRESS(v, a) /(v) = ((gc_root_buffer*)((((zend_uintptr_t)(v)) GC_COLOR) | ((zend_uintptr_t)(a))))#define GC_GET_COLOR(v) /(((zend_uintptr_t)(v)) GC_COLOR)#define GC_SET_COLOR(v, c) /(v) = ((gc_root_buffer*)((((zend_uintptr_t)(v)) ~GC_COLOR) | (c)))#define GC_SET_BLACK(v) /(v) = ((gc_root_buffer*)(((zend_uintptr_t)(v)) ~GC_COLOR))#define GC_SET_PURPLE(v) /(v) = ((gc_root_buffer*)(((zend_uintptr_t)(v)) | GC_PURPLE))

在PHP的內存管理中我們也有看到類似的以最后位作為某種類型的標記方式。

這里以內存分配的最后兩位作為整個結構的顏色標記。其中
白色表示垃圾
紫色表示已放入緩沖區
灰色表示已經進行了一次refcount的減一操作
黑色是默認顏色,正常

【zval定義的改變】
PHP3.0版本 在zend/zend.h文件中,其定義如下:

struct _zval_struct {/* Variable information */zvalue_value value;/* value */zend_uint refcount__gc;zend_uchar type;/* active type */zend_uchar is_ref__gc;};

在php3.0之前的版本,如php5.2.9版本,在zend/zend.h文件中,其定義如下:

struct _zval_struct {/* Variable information */zvalue_value value;/* value */zend_uint refcount;zend_uchar type;/* active type */zend_uchar is_ref;};

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

淺談PHP源碼三十二:PHP內存池中的emalloc/efree層與堆(heap)層

淺談PHP源碼三十一:PHP內存池中的堆(heap)層基礎

淺談PHP源碼三十:PHP內存池中的存儲層

以上就是淺談PHP源碼三十三:PHP5.3新增加的垃圾回收機制(Garbage Collection)基礎的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久婷婷国产麻豆91天堂| 国产成人精品一区二区在线| 草民午夜欧美限制a级福利片| 成人午夜小视频| 68精品久久久久久欧美| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品十八以下禁看| 亚洲精品www| 国产欧美一区二区三区四区| 欧美激情图片区| 在线视频日本亚洲性| 日本精品一区二区三区在线播放视频| 亚洲人在线观看| 国产精品天天狠天天看| 91色视频在线观看| 成人免费视频网| 欧美香蕉大胸在线视频观看| 国产在线观看一区二区三区| 日韩中文字幕在线播放| 国产盗摄xxxx视频xxx69| 亚洲人成亚洲人成在线观看| 久久久视频免费观看| 超薄丝袜一区二区| 国产欧美一区二区| 成人在线视频福利| 国产日产久久高清欧美一区| 国产精品中文字幕久久久| 国产97在线亚洲| 国产精品久久久久久久av电影| 久久免费视频在线观看| 欧美福利在线观看| 亚洲国产一区二区三区四区| 国产日韩欧美一二三区| 26uuu久久噜噜噜噜| 成人高h视频在线| 欧美性生交大片免网| 国产精品高潮视频| 这里精品视频免费| 最近更新的2019中文字幕| 精品久久久视频| 国产综合在线视频| 欧美午夜宅男影院在线观看| 2024亚洲男人天堂| 韩剧1988在线观看免费完整版| 欧美乱大交做爰xxxⅹ性3| 亚洲精品999| 精品女厕一区二区三区| 欧美孕妇与黑人孕交| 黑人欧美xxxx| 欧美激情在线有限公司| 久久久精品网站| 国产精品午夜视频| 欧美日韩国产在线看| 日本免费一区二区三区视频观看| 国产一区二区欧美日韩| 2025国产精品视频| 午夜精品一区二区三区在线| 久久色免费在线视频| 亚洲色图激情小说| 136fldh精品导航福利| 色综合久久久888| 在线精品播放av| 中文国产成人精品久久一| 欧美一区二粉嫩精品国产一线天| 亚洲品质视频自拍网| 国产成人高清激情视频在线观看| 欧美高清视频在线播放| 久久av在线播放| 菠萝蜜影院一区二区免费| 国产精品久久久久77777| 亚洲精品国产精品国自产在线| 国产欧美精品一区二区| 成人精品一区二区三区电影黑人| 久久久999成人| 欧美日韩美女视频| 亚洲久久久久久久久久久| 精品久久久久久国产91| 欧美一级片免费在线| 自拍偷拍亚洲欧美| 狠狠干狠狠久久| 国产精品一区二区三区免费视频| 亚洲a∨日韩av高清在线观看| 国产精品美女网站| 亚洲精品乱码久久久久久金桔影视| 成人444kkkk在线观看| 亚洲区在线播放| 国产色婷婷国产综合在线理论片a| 精品久久久999| 91免费高清视频| 欧美一级在线播放| 性欧美暴力猛交69hd| 91在线精品播放| 国产精品美乳在线观看| 欧美极品少妇xxxxⅹ喷水| 亚洲一区www| 亚洲综合社区网| 日韩精品免费一线在线观看| 日韩成人在线视频观看| 不卡av在线网站| 日韩成人中文电影| 一本色道久久综合狠狠躁篇的优点| 91精品久久久久久综合乱菊| 国产精品久久久久久久久久尿| 欧美国产亚洲视频| 亚洲免费av网址| 亚洲精品99久久久久| 日本精品性网站在线观看| 夜夜嗨av色综合久久久综合网| 国产激情视频一区| 亚洲人免费视频| 亚洲精品美女久久久| 国产a∨精品一区二区三区不卡| 亚洲免费高清视频| 欧美激情视频一区二区| 亚洲午夜久久久久久久| 欧美理论电影网| 亚洲男人天堂网站| 欧美成人自拍视频| 亚洲在线观看视频网站| 国产91ⅴ在线精品免费观看| 欧美日韩性生活视频| 日韩成人在线免费观看| 91精品国产自产在线| 日韩电视剧在线观看免费网站| 精品夜色国产国偷在线| 日韩亚洲欧美中文高清在线| 在线看片第一页欧美| 日韩a**站在线观看| 欧美激情乱人伦| 欧美中文字幕视频在线观看| 日韩av在线精品| 欧美成人高清视频| 亚洲精品国产精品自产a区红杏吧| 最近2019免费中文字幕视频三| 国产成人久久久精品一区| 91精品国产色综合| 琪琪亚洲精品午夜在线| 久久久久北条麻妃免费看| 成人午夜两性视频| 亚洲国产天堂网精品网站| 亚洲欧美日韩成人| 欧美精品日韩三级| 亚洲综合在线中文字幕| 日韩性xxxx爱| 欧美成人四级hd版| 亚洲嫩模很污视频| 欧美黄色三级网站| 日韩欧美在线一区| 亚洲最大av网| 欧美激情一区二区久久久| 亚洲va欧美va在线观看| 91深夜福利视频| 亚洲少妇中文在线| 欧美日韩在线视频一区| 日韩美女中文字幕| 精品女厕一区二区三区| 国产亚洲精品一区二区| 久久综合国产精品台湾中文娱乐网| 日韩在线观看av| 精品久久久中文| 伊人久久久久久久久久| 成人黄色影片在线| 国产精品大片wwwwww| 亚洲国产成人精品久久|