从zval看PHP变量 liangdong@smzdm.com.

Slides:



Advertisements
Similar presentations
分享人:張益源. 個人資料介紹 姓名:張益源 畢業:體育系 97 級 專長:田徑、籃球、游泳 任教學校:慈濟大學實驗國民小學 學校職務:體育兼資訊老師.
Advertisements

办公室保健指南. 减少辐射篇 ❤显示器散发出的辐射多数不是来自它的正面,而是侧面和后面。因此,不要 把自己显示器的后面对着同事的后脑或者身体的侧面。 ❤常喝绿茶。茶叶中含有的茶多酚等活性物质,有助吸收放射性物质。 ❤尽量使用液晶显示器。
教师队伍建设 组员:王英利 赵香媖 侯娟. 主讲内容 2. 中小学教师队伍建设 1. 职业教育师资队伍建设国际比较 3. 高校教师队伍建设与管理.
魏 饴. 处级干部培训班讲座 一、卓越干部的德行素质  常修为政之德、常思贪欲之害、常怀律己之心!  孔老夫子有个观点 “ 为政以德,譬如北辰居其所而众星拱之。 ”  司马光《资治通鉴》 “ 才者,德之资也;德者,才之帅也。 ” “ 德 ” 胜 “ 才 ” 谓之 “ 君子 ” , “ 才 ”
一、真愛密碼 二、尋求真愛 三、有自尊的愛. 。如果雙方對愛情產生 質疑、困惑時,則表示 彼此之間的愛情關係仍 有 待加強或釐清,千萬別 急著為自己的人生大事 下決定。 我是一個 16 歲的未婚媽媽,發現自 己懷孕時,已經五個月大了,我知 道自己沒能力照顧孩子,在驚訝之 於,大人們只好坦然接受,幫我找.
大地遊戲王 課程實錄.
第四章 教育观察研究.
社会保障卡就医实时结算 政策及使用培训 丰台区医疗保险事务管理中心.
全省就业形势和高校毕业生 就业创业扶持政策介绍 省人力资源和社会保障厅副巡视员 吴开平 2013年11月
教师继续教育解决方案 广州迅云教育科技有限公司 2015年1月.
《左传》 烛之武退秦师.
人民教育出版社 章建跃 数学学习与智慧发展 人民教育出版社 章建跃
公共部门人力资源管理.
提 纲 三次考察与改革的回顾 1 学院三周来的新面貌 及下一步工作思路 2 凝心聚力、团结协作、狠抓落实 3.
印染纺织类艺术.
高中新课程历史必修(Ⅰ) 教材比较研究 四川师范大学历史文化学院教授 陈 辉 教育部2009普通高中历史课改远程研修资料.
中國語文基礎知識手冊 不同的詞類 虛詞.
商务礼仪培训.
板块三 议论文阅读 第20课时  方 法 总 结 京 考 解 读 随 堂 演 练 真 题 例 析 知 识 链 接 1.
——以通渭县图书馆青树小项目“携老上网游”为例
素问 · 痹论篇第四十三 主讲人 王洪京.
家政服务员培训教材.
国际贸易理论部分 同济大学经济与管理学院.
人類H7N9流感國內外疫情現況 衛生署 疾病管制局 中區傳染病防治醫療網 王任賢 指揮官.
腹 泻 病 Diarrhea Diseases.
Chapter 13 目的地行銷.
葉金源臨床心理師 FB:寬欣心理治療所 台南市臨床心理師公會理事長 台南市社區大學生命與健康學程講師
诗歌鉴赏表达技巧 ——修辞手法.
PCB培训资料.
陳維立博士 淡江大學國際觀光管理學系 中華民國環境教育學會理事
作文的要素.
高职院校长的领导力建设 中国职业技术教育学会副会长 宁波职业技术学院党委书记 苏志刚.
高考诗歌鉴赏复习专题 送别诗鉴赏.
中国古代诗歌散文欣赏教学策略 郑仁水.
唐代的诗与画 上海市石笋中学 汪洪芳.
吉林大学环境与资源学院 地下水科学与工程系 梁秀娟 水工楼 207
建筑材料—天然石材 第二章天然石材 内容: 岩石的基本性质 常用建筑石材.
西部交通建设科技项目 岩溶地区公路修筑成套技术 研 究 成 果 汇 报 汇报人:余崇俊 贵州省交通科学研究院 2007年5月.
• 由一些病原体,例如细菌、病毒、 寄生虫等引起 • 透过各种不同的传播途径,从一个带 菌者传播给另一个人
白内障手术器械 的清洗、消毒、包装、灭菌 与手术布类、敷料的准备
智能家居在智能电网方面的应用 成员:王宝、郭娅、武小暄、李竟诚 指导老师:段建东.
圣经教训 关于 生和死 Bible teaching on life and death cppt
合肥市疾病预防控制中心 二○○九年七月二十一日
加強水銀體溫計稽查管制及回收 回收作業須知及緊急應變措施
第4章 分錄及日記簿 4-1 借貸法則 4-2 日記簿的格式及記錄方法 4-3 分錄的意義及記錄方法 4-4 常見分錄題型分析
“三生教育”专题 生命·生存·生活.
2013浙江省行测专题 密卷解析及备考冲刺 罗 姮.
門神 在傳統觀念中,門是居住環境中與外界相通的出入口,具有重要的屏障作用。門神顧名思義就是護宅守門的神仙,每逢過年,上至天子百官下至普通百姓,家家戶戶必在門上張貼門神,以保一家平安。 門神種類主要有宅第大門上將軍武門神、內室門戶上祈福文門神,還有童子門神、仙子門神等,形象豐富多樣,皇家貴戚還往往在畫上瀝粉貼金,十分吉祥喜慶。
獨角仙&樹木銀行 生態之旅 製作人:陳芳玲 蔡維其 樹木銀行 獨角仙農場.
第十三屆 Step.1 我們的目標 Step.2 我們的角色 Step.4 權利與義務 義務 權利 年繳會費五百元整
财务管理.
第九章日治時期的台灣(下).
寻觅节日诗情.
植物保护 课程整体设计 汇报 申报省级精品资源共享课建设 植物保护课程组.
突然好想你们···· 11广告1班—黄丹丹.
第三章 心理安全 广西师范大学 罗蕾.
提升课堂质量 助推教师成长 促进教学改革 “一师一优课,一课一名师”活动总结 河南省实验小学.
时间管理 -----高一团体辅导.
政府扶持资金通览 技术改造篇.
本科生医保资料的提交.
統計圖表的製作.
《结构力学认知实验》(授课形式)的上课时间改为: 5月5日(周二)晚上18:00~19:30和19:30~21:00,
《结构力学认知实验》(授课形式)的上课时间改为: 5月7日(周四)晚上18:30~20:00和20:00~21:30,
102大學申請入學備審資料說明 巫雅菁老師.
畢業資格審查系統 操作步驟說明.
新制退休實務計算說明- 現職人員退休範例說明
106 學年度新生入學說明會 國立臺灣海洋大學 教務處簡介
學士學位畢業論文說明 逢 學 大 甲 土 理 管 地 2009/10/05.
高雄市97年度國民小學閱讀計畫創新教學-教案達人創新教學方案
Presentation transcript:

从zval看PHP变量 liangdong@smzdm.com

目录 变量拷贝是否影响性能? 万能的array 为何脚本占用大量内存?

变量拷贝是否影响性能?

安装XDEBUG扩展

共享内存,相安无事 多个变量指向同一个底层数组

我要修改,当机立断 写时复制,底层数组发生拷贝,变量变更指向

zend_string { refcount 引用计数 len 字符串长度 val[] 字符串内存 }; type=IS_STRING zval { type 变量类型 value* 底层内存 } type=IS_ARRAY zend_array { refcount 引用计数 arData* 数组内存 nNumUsed 已用槽位 nNumOfElements 元素个数 nTableSize 总槽位数量 };

万能的array

packed array $a = ['a', 'b', 'c', 'd']; unset($a[1]); 'a' undef 'c' zend_array { arData* 数组内存 nNumUsed 已用槽位 = 4 nNumOfElements 元素个数 = 3 nTableSize 总槽位数量 = 8 }; echo $a[1]; packed array 顺序追加而成的数组,读写时间复杂度O(1)

HASH ARRAY $a = [ 'hello', 'b' => 'php', 'c' => 'world' ]; unset($a['b']); next=2 hello undef world undef -1 -1 -1 zend_array { arData* 数组内存 nNumUsed 已用槽位 = 4 nNumOfElements 元素个数 = 3 nTableSize 总槽位数量 = 4 }; 假设: hash('c') == 0 hash('b') == 1 HASH ARRAY 键值字典OR不适合PACKED存储,则采用HASH存储,读写时间复杂度为O(lgN)

zend_mm_huge_list(>2MB) real_size limit (memory_limit) free_slot[] main_chunk* cached_chunks* huge_list* zend_mm_heap zend_mm_chunk(2MB) zend_mm_page(4K) zend_mm_free_slot(<4K) ... ... ... next zend_mm_huge_list(>2MB) 2MB next 8MB 为何脚本占用大量内存?

small内存申请 zend_mm_heap chunk=2MB 512*8B=4K free_slot[0] ... [1] [2] [3] ... [29] zend_mm_heap chunk=2MB 512*8B=4K ... 8 8 8 8 8 ... SRUN chunk=2MB ... 3072B 3072B 3072B 3072B SRUN(3page,4elements) small内存申请 <=3072B走SRUN分配,不同size对应不同的预分配方案

LARGE内存申请 main_chunk* zend_mm_heap page=4K chunk=2MB ... 8KB LRUN(2page,1elment) next chunk=2MB struct zend_mm_chunk { free_map // 512bits,记录每个page是否被使用 map[512] // 记录每个page的用途(SRUN OR LRUN, page_count) } LARGE内存申请 >3072B && <2MB走LRUN分配,占用连续的多个page

HUGE内存申请 zend_mm_heap chunk=2MB 4MB huge_list* next 2MB >=2MB走Huge分配,占用连续的多个chunk

small内存释放 zend_mm_heap free_slot[0] [1] [2] chunk=2MB [3] 512*8B=4K ... [29] zend_mm_heap chunk=2MB 512*8B=4K ... 8 8 8 8 8 ... SRUN 8 small内存释放 插回free_slot[n]链表头部

large内存释放 main_chunk* cached_chunk* zend_mm_heap page=4K chunk=2MB ... chunk所有page均归还 LRUN(2page,1elment) 8KB(to free) large内存释放 归还对应若干page,若chunk无剩余page外借,则将chunk放入cached_chunk备用

HUGE内存释放 zend_mm_heap chunk=2MB 4MB huge_list* next 2MB

触发memory_limit step1:遍历free_slots,计算所属SRUN外借slots个数 chunk=2MB 512*8B=4K ... 8 8 8 8 8 ... SRUN step2:遍历free_slots,将无外借的SRUN内的slots从free_slots链表删除 step3:遍历main_chunk,将无外借的SRUN对应的pages标记归还 step4:若step3后,chunk无外借的pages,则释放整个chunk 触发memory_limit 分配过的chunk总内存>memory_limit,则执行zend_mm_gc回收SRUN占用的page

q&a