python内存管理

Similar documents
Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Microsoft Word - 生活禮儀柯友惠981

目 录 第 一 章 电 力 行 业 内 部 控 制 操 作 指 南 概 述... 1 第 二 章 内 部 控 制 规 范 体 系 建 设 与 运 行 第 三 章 内 部 环 境 建 设 第 一 节 组 织 架 构 第 二 节 发 展 战 略 第 三 节

編輯要旨 一 教育部為了協助本國失學民眾 新住民及 其他國外朋友 有系統的學習華語文的 聽 說 讀 寫 算等識字能力及跨文化 適應 以培養具有基本公民素養的終身學 習者 特別委託新北市政府教育局新住民 文教輔導科團隊編輯本教材 二 依據上述目的 本教材共有六冊 並分為 六級 分級及單元名稱詳如下表

Oracle 4

<4D F736F F F696E74202D20C8EDBCFEBCDCB9B9CAA6D1D0D0DEBDB2D7F92E707074>

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

WWW PHP

有 不 同 想 法 馬 上 記 錄 下 來, 作 為 寫 作 和 較 特 殊 題 型 的 答 題 材 料 把 握 這 四 到, 再 加 上 考 試 用 書 的 重 點 整 理, 搭 配 服 用, 讓 課 文 與 你 不 再 有 距 離 2. 考 試 成 績 好 差, 心 情 也 好 差, 可 不 可

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

四 本 學 期 程 架 構 : (1) 學 活 流 程 與 策 略 視 聽 故 事 時 事 節 令 生 活 問 題 預 習 單 朗 讀 問 答 討 論 討 論 理 解 欣 賞 想 像 練 習 章 結 構 敘 寫 技 巧 修 辭 要 領 仿 作 造 字 原 理 字 義 釐 清 字 音 字 形 辨 析

編輯要旨 一 教育部為了協助本國失學民眾 新住民及 其他國外朋友 有系統的學習華語文的 聽 說 讀 寫 算等識字能力及跨文化 適應 以培養具有基本公民素養的終身學 習者 特別委託新北市政府教育局新住民 文教輔導科團隊編輯本教材 二 依據上述目的 本教材共有六冊 並分為 六級 分級及單元名稱詳如下表

穨japhkesch.PDF

AIX系统培训7.ppt

《路得記》4章 1-23節

instructions.PDF

Bus Hound 5

3. 圖 解 策 略 (1) 利 用 流 程 圖 心 智 圖 分 類 表 等 圖 表 整 理 重 點, 並 分 析 重 點 的 關 係 (2) 分 析 文 意 脈 絡 結 構 圖, 了 解 脈 絡 的 關 聯 性 三 閱 讀 策 略 的 使 用 建 議 : 1. 教 學 使 用 建 議 ( 詳 見

Microsoft Word - ORA doc

第7章-并行计算.ppt

Go构建日请求千亿微服务最佳实践的副本

mvc

基于UML建模的管理管理信息系统项目案例导航——VB篇

旅 句 良 年 理 了 來 不 不 更 更 說 識 更 樓 歷 練 靈 旅 論 不 了 契 諒 老 老 老 不 勵 老 不 良 論 漏 不 老 老 不 勵 不 了 了 老 論 利 行 老 見 不 見 更 老 玲 歷 老 料 理

Microsoft Word - ch04三校.doc

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

1 C++ 2 Bjarne Stroustrup C++ (system programming) 6 (infrastructure) C++ 7 Herb Sutter 8 C++ (efficiency) (flexibility) 9 (abstraction) (productivity

epub83-1

(Microsoft Word - \260\352\244\244\263\314\262\327\252\251_1_.doc)

Microsoft Word - (web)_F.1_Notes_&_Application_Form(Chi)(non-SPCCPS)_16-17.doc

Chapter 9: Objects and Classes

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

EJB-Programming-3.PDF

Microsoft Word

PowerPoint Presentation

科学计算的语言-FORTRAN95

文档 3

投影片 1

穨control.PDF

Microsoft PowerPoint - plan08.ppt

untitled

ebook66-15

高雄市左營國民小學八十九學年度第一學期一年級總體課程教學進度表

第一章 概论

BYOD IP+Optical (IP NGN) API 4. End-to-End (Service Aware) 5. IP NGN (IP Next Generation Network) ( ) Prime Carrier Management Access Edge Co


int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

簡報技巧

<313031A4C9BEC7C160BA5DB3E A457BAF4A4BDA769AAA9292E584C53>

nbqw.PDF

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

1.ai

Windows XP

Java

C/C++程序设计 - 字符串与格式化输入/输出

Simulator By SunLingxi 2003

一 面 對 問 題 的 關 鍵 認 知 1. 問 題 意 識 第 一 單 元 : 解 決 問 題 的 心 態 與 模 式 指 在 問 題 未 明 朗 化, 或 尚 未 變 成 問 題 之 前, 即 預 先 感 覺 到 有 問 題 存 在 的 一 種 能 力 企 業 主 管 若 無 問 題 意 識,

92 (When) (Where) (What) (Productivity) (Efficiency) () (2) (3) (4) (5) (6) (7) em-plant( SiMPLE++) Scheduling When Where Productivity Efficiency [5]

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

我 把 我 觉 得 书 中 有 用 的 技 巧 还 有 时 间 安 排 都 穿 插 在 这 篇 攻 略 里 了, 所 以 只 要 买 韩 国 人 编 的 模 拟 卷 就 行, 难 度 设 置 还 比 较 好 ( 就 是 上 面 列 的 第 三, 第 四 本 ) 7. 还 有 就 是 由 Lin Lo

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

K301Q-D VRT中英文说明书141009

RAID RAID 0 RAID 1 RAID 5 RAID * ( -1)* ( /2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( )

<4D F736F F F696E74202D20312EB9FEB6FBB1F5B9A4D2B5B4F3D1A7D5E7C1BCA3BAC3E6CFF2D1D0BEBFC9FAB8B4CAD4B5C4BDE1B9B9BBAFC3E6CAD4BFBCBACBCCBDCBF7D3EBCAB5BCF92E BBCE6C8DDC4A3CABD5D>

EC51/52 GSM /GPRS MODEN

EJB-Programming-4-cn.doc

用户大会 论文集2.2.doc

RAID RAID 0 RAID 1 RAID 5 RAID * (-1)* (/ 2)* No Yes Yes Yes SATA A. B. BIOS SATA C. RAID BIOS RAID ( ) D. RAID/AHCI ( ) S ATA S S D ( ) (

ebook

System Global Area, Oracle Background process Oracle, Server Process user process, user process : SQL*PLUS SYSTEM SQL> select name from v$datafile; NA

Microsoft Word - administrative-law-08.doc

RunPC2_.doc

CDWA Mapping. 22 Dublin Core Mapping

ebook 132-6

回滚段探究


Microsoft PowerPoint - 異常事件管理 [相容模式]

「人名權威檔」資料庫欄位建置表

(Microsoft Word - Motion Program \270\305\264\272\276\363 \307\245\301\366 \271\327 \270\361\302\367.doc)

地 理 志 鏡 止 煞, 來 達 到 安 宅 的 效 果 4. 門 神 符 紙 : 於 門 板 繪 製 門 神, 作 為 宅 第 的 守 護, 民 宅 所 使 用 的 門 神 題 材, 多 為 天 官 賜 福 或 文 武 官 員 符 紙 是 以 畫 了 符 咒 的 紙 懸 掛 室 內, 或 加 框

Serial ATA ( Nvidia nforce430)...2 (1) SATA... 2 (2) B I O S S A T A... 3 (3) RAID BIOS RAID... 6 (4) S A T A... 9 (5) S A T A (6) Microsoft Win

2/80 2

: ( ),,

Microsoft PowerPoint - os_4.ppt

ebook10-5

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2

ebook 165-5

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

《益善行道 ─ 東華三院歷史專題文集》

ebook14-4

SDS 1.3

提纲 1 2 OS Examples for 3


Chapter 9: Objects and Classes

ch_code_infoaccess

C++ 程式設計


2005 3

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f

Transcription:

Python 级内存管理 - xiaorui.cc

Object-specific allocators [ int ] [ dict ] [ list ]... [ string ] Python core +3 <----- Object-specific memory -----> <-- Non-object memory --> [ Python's object allocator ] +2 ####### Object memory ####### <------ Internal buffers ------> [ Python's raw memory allocator (PyMem_ API) ] +1 <----- Python memory (under PyMem manager's control) ------> [ Underlying general-purpose allocator (ex: C library malloc) ] 0 <------ Virtual memory allocated for the python process -------> ========================================================================= [ OS-specific Virtual Memory Manager (VMM) ] -1 <--- Kernel dynamic storage allocation & management (page-based) ---> [ ] [ ] -2 <-- Physical memory: ROM/RAM --> <-- Secondary storage (swap) -->

* Request in bytes Size of allocated block Size class idx * ---------------------------------------------------------------- * 1-8 8 0 * 9-16 16 1 * 17-24 24 2 * 25-32 32 3 * 33-40 40 4 * 41-48 48 5 * 49-56 56 6 * 57-64 64 7 *......... * 497-504 504 62 * 505-512 512 63 * * */

名词解释 process heap Arenas Pool UsedPools FreePools

method posix malloc python memory pool object buffer pool

Arena Process Pool stack heap Arena UserPool 1-8 249-256 Free Block Free Block Use Block bss init data malloc heap & pool FeeePool Pool text Pool Headers Pool No BLock Pool

userdpool design UserdPools 1-8 9-16 17-24 249-256 Pool Header Free Block Free Block Pool Free Block Free Block Use Block Header 分配回收 同 个 Pool 下 Block 样长单 Pool 为 4kb Block 及 Pool 都为单链表

free pool desgin FeeePool Pool Pool Headers Pool Pool No BLock Pool Headers Pool 为 4kb 小 Pool 清理 Headers No BLock

where store variable? run-time Stack heap list [1,2, 3] dict { n : 1 } int 1

why? In [1]: a = 123 In [7]: a = 'n' In [2]: b = 123 In [8]: b = 'n' In [3]: a is b Out[3]: True In [9]: a is b Out[9]: True In [4]: a = 1000 In [10]: a = "python" In [5]: b = 1000 In [11]: b = "python" In [6]: a is b Out[6]: False In [12]: a is b Out[12]: True

why? In [10]: a = b = 'nima' In [1]: def go(var): In [11]: b = a...: print id(var) : In [12]: a is b 只有引用? Out[12]: True In [2]: id(a) Out[2]: 4401335072 In [13]: b = 'hehe' In [3]: go(a) In [14]: a is b 4401335072 Out[14]: False

python objects stored in memory? names Python Has Names, Not Variables!!! names object

整数对象池 小整数 整数 -5-4 0 256 257-5 -4 257-5 -4 257 var_1 var_2 28 bytes 解释器初始化 var_3 var_4 not the same addr! the same addr!

整数对象池 Block List PyIntBlock PyIntBlock 不会归还给 Arena 和 os!!! Free List PyIntBlock PyIntBlock

字符对象池 a b c d var_1 var_2 单个字符 38 bytes 由解释器初始化 the same addr!

字符串对象池 0 1 2 3 aa en cao oh woyao buyao kuai feile ref hash 存储变量 var_1 var_2 共用地址 记录引用计数

PyObject_GC_TRACK func: PyList_New PyGC_Head Node Node func: list_dealloc ref: https://svn.python.org/projects/python/trunk/objects/listobject.c

ref count 300 x = 300 y = x z = [x, y] ref += 1 X ref += 1 y ref += 2 Z References -> 4!

What does del do? x = 300 300 y = x del x ref -= 1 X y The del statement doesn t delete objects. References -> 1! removes that name as a reference to that object reduces the ref count by 1

ref count case def go(): w = 300 ref count +1 go() w is out of scope; ref count -1 a = fuc. del a del a; ref count -1 b = en, a 重新赋值 ; ref count -1 b = None

class Node: cyclical ref def init (self, va): self.va = va def next(self, next): Mid self.next = next if del mid node: mid = Node( root ) how? left = Node( left ) right = Node( right ) left right mid(left) left.next(right) right.next(left)

mark & sweep gc root b a R c w K G

分代回收 PyGC_Head Young node node node node node node node 分 治之 Old node node node node node node 提 效率 命周期 空间换时间 Permanent node node node node node node

when gc import gc gc.set_threshold(700, 10, 5) 计数器? 700? PyMemApi 分配计数器 10? 5? 0 代回收 > 700 1 代回收 N % 10 2 代回收 N % 5

summery 分配内存 -> 发现超过阈值了 -> 触发垃圾回收 -> 将所有可收集对象链表放到 起 -> 遍历, 计算有效引用计数 -> 分成有效引用计数 =0 和有效引用计数 > 0 两个集合 -> 于 0 的, 放 到更老 代 -> =0 的, 执 回收 -> 回收遍历容器内的各个元素, 减掉对应元素引用计数 ( 破掉循环引用 ) -> 执 -1 的逻辑, 若发现对象引用计数 =0, 触发内存回收 -> python 底层内存管理机制回收内存

weakref 弱引用 class Expensive(object): def del (self): 不参与引用计数 print '(Deleting %s)' % self 解决循环引用 obj = Expensive() r = weakref.ref(obj) del obj print 'r():', r() class Parent(object): def init (self): self.children = [ Child(self) ] class Child(object): def init (self, parent): self.parent = weakref.proxy(parent)

可变 vs 不可变 (obj) string list int dict tuple

container objects a = [10, 10, 11] b = a PyObject Type integer PyListObject Type list rc 1 10 10 rc 2 value 10 items size 11 PyObject Type integer rc 1 value 11

copy.copy a = [10, 10, [10, 11] ] b = copy.copy(a) PyObject PyListObject Type integer Type list rc 1 items 10 10 rc 2 value 10 size ref PyListObject PyListObject PyObject Type list rc 1 10 10 11 Type integer items 10 rc 1 size ref value 11

copy.deepcopy a = [10, [ 10, 11 ] ] b = copy.deep(a) PyObject PyListObject Type list rc 1 items size 10 ref PyListObject 10 11 Type integer rc 2 value 10 PyListObject Type list rc 1 items 10 PyListObject 10 11 PyObject Type integer rc 1 size ref value 11

diy gc import gc import sys gc.set_debug(gc.debug_stats gc.debug_leak) a=[] b=[] a.append(b) print 'a refcount:',sys.getrefcount(a) # 2 print 'b refcount:',sys.getrefcount(b) # 3 del a del b print gc.collect() # 0

Garbage Collector Optimize memory bound 可以降低 threshold 来时间换空间 cpu bound 提 threshold 来空间换时间 暂停 gc, 引 master worker 设计

Q & A 引用计数跟 gil 的影响? gc 是否是原? gc 的 stop the world 现象?

END xiaorui.cc